Imágenes remotas en un ListView con el patrón ViewHolder

Pregunta principal:

¿Cuál es el método libre de fallos más eficiente de las imágenes remotas de carga remota en un adaptador ListView simple que utiliza el patrón ViewHolder?

Actualmente tengo una implementación que primero verificará un mapa de bits de mapa de bits de SoftReference para una versión de caché suave de la imagen. Si eso falla compruebo mi escondrijo duro para una copia de la imagen. Si eso falla, lo obtengo de la web. Hago todo esto en un hilo separado y en una cola para eliminar descargas simultáneas o duplicadas.

El problema es cuando se carga a través de una devolución de llamada. Porque utilizo el patrón de ViewHolder mis opiniones se reciclan constantemente y no he encontrado una manera sólida de eliminar imágenes diferentes que son aleatoriamente unidas a mi ImageViews. Hago el defecto a una imagen del defecto antes de cada carga pero porque las vistas se están reciclando tan rápidamente los "viejos" oyentes se aplican en mi ImageView que proporciona la imagen incorrecta que se substituye entonces con la imagen correcta.

La única solución semisólida que he encontrado es usar el ViewHolder como el oyente, pero esto sólo hace que el problema sea menos evidente. Todavía sucede en un desplazamiento rápido.

Cualquier ayuda sería apreciada.

Actualizar:

Https://github.com/DHuckaby/Prime

He encontrado una solución al problema de la conmutación de la imagen y proporcionaré un pedazo del código abajo. Todavía no lo acepto porque no sé si este es el método más eficiente que es mi pregunta original. Si esto se implementa correctamente funcionará perfectamente.

public void getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { ... String imagePath = insertImageUrlHere(); Object tag = holder.userThumb.getTag(); if (tag != null && tag.equals(imagePath)) { // Do nothing } else { holder.userThumb.setTag(imagePath); holder.userThumb.setImageResource(R.drawable.default_image); AsynchronousImageLoadingUtility.load(imagePath, holder); } ... return convertView; } private static class ViewHolder implements AsynchronousImageLoadingUtilityCallback { private ImageView userThumb; @Override public void onImageLoad(String source, Bitmap image) { if (image != null && userThumb.getTag().equals(source)) { userThumb.setImageBitmap(image); } } } 
  • Cómo rellenar JSON desde este enlace a Android Listview
  • Actualización de textview en la actividad una vez que se cambian los datos en la clase de adaptador
  • ¿Cómo obtener el ListView con desplazamiento de carrusel en Android?
  • Conexión de TextWatcher con un adaptador personalizado para filtrar texto a través de EditText
  • Android: patrón de ViewHolder y diferentes tipos de filas?
  • ¿Cómo establecer alturas diferentes para cada fila en un ListView?
  • SearchView con múltiples fragmentos usando viewpager en android
  • ArrayList Adapter (para ListView) sólo muestra el primer elemento agregado
  • ¿Cómo llenar un ListView con una ArrayList?
  • ¿Por qué android: listSelector cambia incorrectamente de Actividad a Actividad
  • Encabezados ListView sin separadores de elementos de lista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.