Recyclerview Adapter and Glide - same image every 4-5 rows
Solution 1:
The answers here are incorrect, although they're on the right track.
You need to call Glide#clear()
, not just set the image drawable to null. If you don't call clear()
, an async load completing out of order may still cause view recycling issues. Your code should look like this:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (parseList.get(position).get("logo") != null) {
ParseFile image = (ParseFile) parseList.get(position).get("logo");
String url = image.getUrl();
Glide.with(context)
.load(url)
.placeholder(R.drawable.piwo_48)
.transform(new CircleTransform(context))
.into(holder.imageView);
} else {
// make sure Glide doesn't load anything into this view until told otherwise
Glide.with(context).clear(holder.imageView);
// remove the placeholder (optional); read comments below
holder.imageView.setImageDrawable(null);
}
}
Solution 2:
Maybe you need to try something like this
.signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
sample :
Glide.with(context)
.load(url)
.placeholder(R.drawable.progress_animation)
.crossFade()
.signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
.error(R.drawable.image_error_404)
.into(iv);
Solution 3:
In RecyclerView
each row is recycled with new data. In your code you are setting ImageView
only when it's not null
and otherwise doing nothing. In this case when it's not null ImageView
will show old image since you didn't override
for the current object. You can fix this by adding else condition and setting ImageView
to null/blank anything.
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if(parseList.get(position).get("logo") != null){
ParseFile image = (ParseFile) parseList.get(position).get("logo");
String url = image.getUrl();
Glide.with(context)
.load(url)
.placeholder(R.drawable.piwo_48)
.transform(new CircleTransform(context))
.into(holder.imageView);
}
else{
holder.imageView.setImageDrawable(null);
}
}
Solution 4:
When "logo" is null, you get the recycled image instead of clearing it. Add this code to properly clear the image:
holder.imageView.setImageDrawable(null);