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);
}
}
}
感謝。
感謝を試してみてください。私はこれらの2行を追加しましたが、イメージはまだ複製しています –