1

私はRecyclerviewとGlideを使ってリストを実装し、画像を非同期的に読み込みます。起こっていることは、カードがリサイクルされるたびに、イメージが完全にロードされる前に、グライドイメージレスポンスが別のカードビューに送られることです。結果として、何らかの形で画像がリストに重複して表示されます。私は多くのアプローチを試みましたが、私はまだこの問題を抱えています。私はそれを解決するのに役立つ答えを本当にありがとう。Recyclerview Glideを使って画像を複製する

これは私の単純化されたコードです:

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); 

     } 
    } 

} 

感謝。

答えて

0

この

 

.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

感謝を試してみてください。私はこれらの2行を追加しましたが、イメージはまだ複製しています –

関連する問題