Я реализую список с использованием 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);
}
}
}
Спасибо.
Спасибо. Я добавил эти две строки, но изображения все еще дублируются –