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);
}
}
}
감사합니다.
감사를 사용해보십시오. 이 두 줄을 추가했지만 이미지는 여전히 복제 중입니다. –