1

Ich implementiere eine Liste mit Recyclerview und Glide, um die Bilder asynchron zu laden. Was passiert ist, dass jedes Mal, wenn eine Karte recycelt wird, bevor das Bild vollständig geladen ist, die Glide-Bild-Antwort zu einer anderen Kartenansicht geht. Als Ergebnis sehen wir Bilder auf der Liste irgendwie duplizieren. Ich habe viele Ansätze ausprobiert, aber ich bin immer noch mit diesem Problem. Ich danke wirklich jeder Antwort, um mir zu helfen, es zu lösen.Recyclerview Duplizieren von Bildern mit Glide

Das ist mein vereinfachten Code:

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.ZueiraViewHolder> { 

    public static ArrayList<Zueira> zueiras; 
    public Context context; 
    private static final int IMAGE_WIDTH = 400; 
    private static final int IMAGE_HEIGHT = 600; 

    public RVAdapter(ArrayList<Zueira> zueiras, Context context) { 
     this.zueiras = zueiras; 
     this.context = context; 
    } 

    @Override 
    public void onBindViewHolder(ZueiraViewHolder holder, int position) { 

     // set description 
     holder.zueira_description.setText(zueiras.get(position).getDescription()); 

     // THIS THING IS ASYNC! 
     // I think when I scroll too fast, since it's async, the response may be 
     // coming late because that card was already recycled 
     Glide.with(context) 
      .load(zueiras.get(position).getUrl()) 
      .asBitmap() 
      .into(new SimpleTarget<Bitmap>(IMAGE_WIDTH, IMAGE_HEIGHT) { 
       @Override 
       public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { 

        // set image bitmap 
        holder.zueira_image.setImageBitmap(resource); 

        // some click listener 
        holder.zueira_image.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View view) { 

          // some logic goes here after the image is completely loaded 

         } 
        }); 

       } 

       @Override 
       public void onLoadFailed(Exception e, Drawable errorDrawable) { 
        super.onLoadFailed(e, errorDrawable); 
       } 
      }); 
    } 

    @Override 
    public ZueiraViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.custom_row, viewGroup, false); 
     ZueiraViewHolder pvh = new ZueiraViewHolder(v); 
     return pvh; 
    } 

    @Override 
    public int getItemCount() { 
     return zueiras.size(); 
    } 

    @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 

    public static class ZueiraViewHolder extends RecyclerView.ViewHolder { 

     CardView cv; 
     public ImageView zueira_image; 
     public TextView zueira_description; 

     ZueiraViewHolder(View itemView) { 
      super(itemView); 

      cv = (CardView) itemView.findViewById(R.id.cv); 
      zueira_image = (ImageView) itemView.findViewById(R.id.zueira_image); 
      zueira_description = (TextView) itemView.findViewById(R.id.zueira_description); 

     } 
    } 

} 

Dank.

Antwort

0

Versuchen Sie, diese

 

.diskCacheStrategy(DiskCacheStrategy.NONE) // no point in caching because it's saved to a File anyway 
.skipMemoryCache(true) // make sure to re-read if original image changed 

+0

Dank. Ich habe diese zwei Zeilen hinzugefügt, aber Bilder werden immer noch dupliziert –

Verwandte Themen