1

Recyclerview 및 Glide를 사용하여 이미지를 비동기 적으로로드하는 목록을 구현하고 있습니다. 이미지가 완전히로드되기 전에 카드를 재활용 할 때마다 글라이드 이미지 응답이 다른 카드보기로 전송됩니다. 결과적으로 우리는 어떻게 든 목록에 이미지를 복제하는 것을 볼 수 있습니다. 나는 많은 접근법을 시도했지만 여전히이 문제를 안고있다. 나는 그것을 해결하는 데 도움이되는 어떤 대답에 정말로 감사한다.Recyclerview 글라이드를 사용하여 이미지 복제

이 내 간단한 코드입니다

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

감사를 사용해보십시오. 이 두 줄을 추가했지만 이미지는 여전히 복제 중입니다. –