Recyclerview Adapter and Glide - same image every 4-5 rows Recyclerview Adapter and Glide - same image every 4-5 rows android android

Recyclerview Adapter and Glide - same image every 4-5 rows


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);    }} 


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);


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);        }    }