@Override
        public void onBindViewHolder(OptagelseViewHolder holder, int position) {
          Optagelse optagelse = trin.svar.optagelser.get(position);
          holder.billedetekstUnderOpdatering = true;
          holder.billedetekst.setText(trin.svar.optagelser.get(position).tekst);
          holder.billedetekstUnderOpdatering = false;
          holder.billede.setImageDrawable(null);
          // int højde = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 150,
          // rod.getResources().getDisplayMetrics());
          // int bredde = (int) (højde*optagelse.aspektRatio);
          // holder.billede.getLayoutParams().height = højde;
          // holder.billede.getLayoutParams().width = bredde==0? ViewGroup.LayoutParams.WRAP_CONTENT
          // : bredde;

          // Vis billedet. Først prøver vi med lokal URI
          if (optagelse.lokalUri != null && !optagelse.ignorerLokalUri) {
            Uri lokalUri = Uri.parse(optagelse.lokalUri);
            try {
              // Tjek om den kan læses
              InputStream stream = App.instans.getContentResolver().openInputStream(lokalUri);
              stream.close();

              Glide.with(rod.getContext()).load(lokalUri).fitCenter().into(holder.billede);
              return; // Hurra, det gik godt. Hop ud
            } catch (Exception e) {
              optagelse.ignorerLokalUri =
                  true; // URI dur ikke på denne maskine, den kommer nok fra en anden, øv bøv
              Log.d("ignorerLokalUri for optagelse " + position + ": " + e);
            }
          }
          // OK, vi henter den over nettet og cacher den hist og pist

          String url = optagelse.url;
          if (optagelse.cloudinary_id != null) {
            // url = App.cloudinary.url().transformation(new
            // Transformation().height(højde)).generate(optagelse.cloudinary_id);
            url = App.cloudinary.url().generate(optagelse.cloudinary_id);
            // Log.d("cloudinary_id => "+url+ " i stedet for "+optagelse.url);
          }
          Glide.with(rod.getContext()).load(url).fitCenter().into(holder.billede);
          // Picasso.with(rod.getContext()).load(url).resize(bredde,højde).into(holder.billede);
        }
  @Override
  public void onClick(View v) {
    if (v.getId() == R.id.galleri) {
      Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
      App.onActivityResultListe.add(this);
      getActivity().startActivityForResult(i, VÆLG_BILLEDE);
    }
    if (v.getId() == R.id.tag_billede)
      try {

        Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // Hvis vi vil læse billedet i fuld opløsning fra ekstern lager/SD-kort skal vi give en URI
        filPåEksterntLager = DiverseIO.opretUnikFilICache("TRIN_" + trin.id, ".jpg");
        i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(filPåEksterntLager));
        App.onActivityResultListe.add(this);
        getActivity().startActivityForResult(i, TAG_BILLEDE);
      } catch (Exception e) {
        Log.rapporterFejl(e);
      }
  }
 @Override
 public void onClick(View v) {
   if (v == billede) {
     Optagelse optagelse = trin.svar.optagelser.get(getAdapterPosition());
     String fil = getFileLoction(optagelse);
     Log.d("Fil: " + fil);
     Intent intent = new Intent(getActivity(), VisningsAktivitet.class);
     intent.putExtra(VisningsAktivitet.VISNING_TYPE, 1);
     intent.putExtra(VisningsAktivitet.VISNING_URI, fil);
     startActivity(intent);
   } else if (v == slet) {
     trin.svar.ændretSkalGemmes = true;
     final int pos = getAdapterPosition();
     final Optagelse fjernetOptagelse = trin.svar.optagelser.remove(pos);
     senestSlettedeOptagelse = fjernetOptagelse;
     adapter.notifyItemRemoved(pos);
     Snackbar.make(recyclerView, "Optagelse fjernet", Snackbar.LENGTH_LONG)
         .setAction(
             "Fortryd",
             new View.OnClickListener() {
               @Override
               public void onClick(View view) {
                 trin.svar.ændretSkalGemmes = true;
                 trin.svar.optagelser.add(pos, fjernetOptagelse);
                 adapter.notifyItemInserted(pos);
                 recyclerView.smoothScrollToPosition(pos);
               }
             })
         .show();
     /*
     int pos = getAdapterPosition();
     Optagelse o = trin.svar.optagelser.remove(pos);
     trin.svar.optagelser.add(o);
     adapter.notifyItemMoved(pos, trin.svar.optagelser.size()-1);
     */
   } else {
     App.udestår("vis popop med billede");
   }
 }
  public static void gemOptagelse(final Trin trin, final Optagelse optagelse) {
    try {
      Log.d("gemOptagelse lokalUri=" + optagelse.lokalUri);

      // Vent til allersidst i eventkøen så animationen kan ses
      Diverse.udførSidstIHovedtråden(
          200,
          new Runnable() {
            @Override
            public void run() {
              trin.svar.optagelser.add(optagelse);
              trin.svar.ændretSkalGemmes = true;
              for (Runnable obs : trin.svar.optagelseTilføjetObservatører) obs.run();
              //          UploadService.scheduleImageUpload(App.instans.getApplicationContext(),
              // optagelse.id, optagelse.lokalUri);
              OploadService2.start();
            }
          });
      /*
        final ContentResolver cr = App.instans.getContentResolver();
        BitmapFactory.Options bmOptions = new BitmapFactory.Options();
        bmOptions.inJustDecodeBounds = true;
        FileInputStream is = cr.openAssetFileDescriptor(Uri.parse(optagelse.lokalUri), "r").createInputStream();
        BitmapFactory.decodeStream(is, null, bmOptions);
        is.close();
        optagelse.aspektRatio = (float) bmOptions.outWidth / bmOptions.outHeight;
        App.sætErIGang(true, "cloudinary");
        new AsyncTask() {
          @Override
          protected Object doInBackground(Object[] params) {
            try {
              //uploadParams.put("resource_type", "video");
              //uploadParams.put("resource_type", "auto");
              FileInputStream is = cr.openAssetFileDescriptor(Uri.parse(optagelse.lokalUri), "r").createInputStream();
              Map m = App.cloudinary.uploader().upload(is, ObjectUtils.emptyMap());//ObjectUtils.asMap("public_id", "TRIN_" + trin.id));
              is.close();
              Log.d("cloudinary map="+m);
              Log.d("App.cloudinary.signedPreloadedImage(m) "+App.cloudinary.signedPreloadedImage(m));
              App.cloudinary.signedPreloadedImage(m);
              // map={resource_type=image, etag=441f1307c34a040d0746927f36bca2df, signature=9e0b8cd6d7956176b096e489ab916fab87568f63, url=http://res.cloudinary.com/vuc/image/upload/v1450452511/sample_remote.jpg, height=480, secure_url=https://res.cloudinary.com/vuc/image/upload/v1450452511/sample_remote.jpg, format=jpg, public_id=sample_remote, version=1450452511, original_filename=file, width=640, created_at=2015-12-18T15:28:31Z, tags=[], bytes=114102, type=upload}
              // map={resource_type=image, etag=52012cde897d0095befa9809accc07a9, signature=2099119561879b4eb6be40af3d3f6502aabdb4e4, url=http://res.cloudinary.com/vuc/image/upload/v1452530538/rqlpprmolxx9gckaza3o.jpg, height=480, secure_url=https://res.cloudinary.com/vuc/image/upload/v1452530538/rqlpprmolxx9gckaza3o.jpg, format=jpg, public_id=rqlpprmolxx9gckaza3o, version=1452530538, original_filename=file, width=640, created_at=2016-01-11T16:42:18Z, tags=[], bytes=96149, type=upload}

              return m;
            } catch (Exception e) {
              App.langToast("Det lykkedes ikke at oploade billedet.\n"+e);
              e.printStackTrace();
            }
            return null;
          }

          @Override
          protected void onPostExecute(Object o) {
            App.sætErIGang(false, "cloudinary");
            if (o instanceof Map) {
              Map m = (Map) o;
              optagelse.url = (String) m.get("secure_url");
              if (App.udvikling) App.kortToast("optagelse.url="+optagelse.url);
              optagelse.cloudinary_id = (String) m.get("public_id");
              trin.svar.ændretSkalGemmes = true;
              Fb.gemSvarForEmne(trin.emne);
            }
          }
        }.execute();
      */
    } catch (Exception e) {
      Log.rapporterFejl(e);
    }
  }
 @Override
 public void onClick(View v) {
   if (v.getId() == R.id.supplerende_info) {
     startActivity(new Intent(getActivity(), IndstillingerAkt.class));
     return;
   }
   try {
     final Overførsler.Overførsel u = (Overførsler.Overførsel) v.getTag();
     if (v.getId() == R.id.startStop) {
       Log.d(" startStopKnap " + u);
       if (u.getStatus() == PAUSET) {
         u.setStatus(VENTER);
       } else {
         u.setStatus(PAUSET);
         u.oploadtråd.interrupt();
         App.kortToast("u.oploadtråd.interrupt()!!");
       }
       u.trin.svar.ændretSkalGemmes = true;
       Fb.gemSvarForEmne(u.trin.emne);
       run();
     } else if (v.getId() == R.id.slet) {
       new AlertDialog.Builder(getActivity())
           .setTitle("Slet optagelse?")
           .setMessage("Vil slette optagelsen? Den bliver fjernet fra din besvarelse.")
           .setPositiveButton(
               android.R.string.ok,
               new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface d, int w) {
                   if (u.getStatus() != PAUSET) {
                     u.setStatus(PAUSET);
                     if (u.oploadtråd != null) u.oploadtråd.interrupt();
                   }
                   u.trin.svar.ændretSkalGemmes = true;
                   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                     // Animeret fjernelse af listeelement
                     int pos = liste.indexOf(u);
                     final View le = listView.getChildAt(pos - listView.getFirstVisiblePosition());
                     le.animate()
                         .alpha(0)
                         .translationX(le.getWidth())
                         .withEndAction(
                             new Runnable() {
                               @Override
                               public void run() {
                                 le.setAlpha(1);
                                 le.setTranslationX(0);
                                 u.trin.svar.optagelser.remove(u.optagelse);
                                 OverførslerFrag.this.run();
                                 Fb.gemSvarForEmne(u.trin.emne);
                               }
                             });
                   } else {
                     u.trin.svar.optagelser.remove(u.optagelse);
                     OverførslerFrag.this.run();
                     Fb.gemSvarForEmne(u.trin.emne);
                   }
                 }
               })
           .setNegativeButton(android.R.string.cancel, null)
           .show();
     } else {
       Log.rapporterFejl("Ugyldigt valg");
     }
   } catch (Exception e) {
     Log.rapporterFejl(e);
   }
 }