Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Recyclerview Adaptador y Glide – misma imagen cada 4-5 filas

Tengo este problema – apenas para los propósitos de prueba agregué ParseFile a uno de ParseObject de la lista recibida. En lugar de mostrar sólo en esa fila que muestra cada 4-5 filas, a veces más, a veces menos. Supspecto que la visión del reciclaje tiene algo que ver con esto. Curiosamente, otros datos (eliminados de este ejemplo) funcionan bien con la variable de position .

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

4 Solutions collect form web for “Recyclerview Adaptador y Glide – misma imagen cada 4-5 filas”

Las respuestas aquí son incorrectas, aunque están en el camino correcto.

Es necesario llamar a Glide#clear() , no sólo establecer la imagen drawable a null. Si no llama clear() , una carga asíncrona que termina fuera de servicio puede causar problemas de reciclado de la vista. Su código debería tener este aspecto:

 @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.clear(holder.imageView); // remove the placeholder (optional); read comments below holder.imageView.setImageDrawable(null); } } 

Cuando "logotipo" es nulo, se obtiene la imagen reciclada en lugar de borrarla. Agregue este código para borrar correctamente la imagen:

 holder.imageView.setImageDrawable(null); 

En RecyclerView cada fila se recicla con nuevos datos. En el código que está configurando ImageView sólo cuando no es null y de lo contrario no hacer nada. En este caso, cuando no es nulo, ImageView mostrará la imagen antigua ya que no override el objeto actual. Puede solucionar esto agregando otra condición y configurando ImageView a null / blank cualquier cosa.

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

Tal vez usted necesita para intentar algo como esto

 .signature(new StringSignature(String.valueOf(System.currentTimeMillis()))) 

Muestra

 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); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.