Este es un escenario muy común: mostrar imágenes en un ListView que deben descargarse de Internet.Android - Problema con la carga lenta de imágenes en un ListView
Ahora tengo una subclase personalizada de ArrayAdapter que utilizo para ListView. En mi implementación getView() del ArrayAdapter, genero un hilo separado para cargar una imagen. Una vez realizada la carga, busca el ImageView adecuado y establece la imagen con ImageView.setImageDrawable(). Así que la solución que utilicé es similar a esta: Lazy load of images in ListView
El problema que tengo es que tan pronto como realizo la llamada a setImageDrawable() en el ImageView, el ListView refresca de alguna manera todas las filas actualmente visibles en ¡la lista! Esto resulta en una especie de bucle infinito:
- getView() se llama se genera
- hilo para cargar la imagen se carga imagen
- ; setImageDrawable() se llama el ImageView
- ListView lo recoge por alguna razón y se refresca
- Para el ListView para refrescar, getView() se llama para cada fila visible, por lo que volver al paso 1 y toda la cosa se repite a sí mismo
Por lo que puedo ver, la solución propuesta en "Android - ¿Cómo puedo hacer una carga de imágenes en ListView?" (ver enlace arriba) simplemente no funciona. Puede parecer que sí, pero funcionará muy lento porque, en el fondo, sigue recargándose las filas visibles actualmente.
¿Alguien se encontró con esto antes y/o tiene una solución para esto?
Sí, estoy usando un mapa para almacenar en caché las imágenes. Pero eso no importa, ya que finalmente sigo llamando a setImageDrawable(), que de nuevo desencadena la actualización. Si pudiera de alguna manera desactivar el refesh, resolvería mi problema. No uso SoftReferences aún (pero lo haré), pero eso es solo una optimización de memoria, esto no resuelve el ciclo infinito –
buen punto No entendí lo que quería decir con "thread is spawned to * load * image" . Voy a reescribir mi respuesta – Will
Gracias por sus respuestas rápidas :) Lo que está describiendo resuelve el problema cuando no está reutilizando las vistas para mostrar filas como yo. Al reutilizar las filas me refiero al uso del argumento "convertView" que se da a getView(). ¿Conoces una solución para esto al reutilizar las vistas de fila? (porque en ese caso TIENE que llamar a setImageDrawable() cada vez) –