Cargando imágenes en un gridview con tarea asíncrona, no cargando correctamente

Estoy tratando de cargar thumnails en un gridview asíncrono, porque de otra manera demora demasiado tiempo para mostrar!

Cuando lo hago de la manera normal, muestra las imágenes bien. (Código e imagen)

Utilidades

public static Bitmap getThumbnail(Context context, Bitmap bitmap, int columns){ WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); Point size = new Point(); display.getSize(size); int scale = size.x / columns; Bitmap bit = ThumbnailUtils.extractThumbnail(bitmap, scale, scale); return bit; } 

Adaptador

  @Override public View getView(int position, View convertView, ViewGroup parent) { View view; if(convertView == null){ LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.adapter_item, null); } else{ view = convertView; } ImageView image = (ImageView)view.findViewById(R.id.img_item); image.setImageBitmap(Utilities.getThumbnail(context, BitmapFactory.decodeFile(((Item) this.collection.get(position)).getSrc()), 5)); return view; } 

Cuadrícula con imágenes cargadas

Y este es el resultado con el asyncTask

AsyncTask

 public class ImageGridHandler extends AsyncTask<String, Void, Bitmap>{ private final WeakReference<ImageView> imageViewReference; private Context context; public ImageGridHandler(Context context, ImageView img){ imageViewReference = new WeakReference<ImageView>(img); this.context = context; } @Override protected Bitmap doInBackground(String... params) { return PixzelleUtilities.getThumbnail(this.context, BitmapFactory.decodeFile(params[0]) ,5); } @Override protected void onPostExecute(Bitmap result) { final ImageView imageView = imageViewReference.get(); imageView.setImageBitmap(result); } } 

Adaptador

 @Override public View getView(int position, View convertView, ViewGroup parent) { View view; if(convertView == null){ LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.adapter_item, null); } else{ view = convertView; } ImageView image = (ImageView)view.findViewById(R.id.img_item); image.setImageBitmap(null); ImageGridHandler handler = new ImageGridHandler(context, image); handler.execute(((Item)this.collection.get(position)).getSrc()); return view; } 

Las imágenes son pequeños rectángulos negros.

Las imágenes no se cargan correctamente

Los uris son correctos porque puedo tocar las imágenes y abrir en la ventana emergente!

¿Me estoy perdiendo de algo?

Debe notificar a su adaptador que el diseño ha cambiado para que la vista pueda volver a medirse. Esto es caro, sin embargo, y causará un re-diseño cada vez que una imagen se carga. Debe evitar esto teniendo un tamaño fijo para cada uno de los cuadros gridview. Actualmente, mi conjetura es que su R.layout.adapter_item.xml tiene wrap_content para su altura. Cambie esto a un valor fijo y debería resolver su problema.

Si desea tomar un golpe de rendimiento, notifique a su adaptador de que se ha producido un cambio con notifyDataSetChanged.

http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetChanged ()

  • Cómo hacer la vista de cuadrícula de Android - espaciamiento vertical dinámico?
  • Obtener ID de la vista en GridView
  • GridView OnItemClickListener no está llamando a onItemClick
  • Cómo diseñar una 'cuadrícula' de imágenes en el centro de la pantalla
  • Android: ¿Cómo puedo acelerar el desplazamiento de GridView?
  • Android: getLocationOnScreen devuelve 0 para imageview dentro de gridview
  • Cómo establecer el color de fondo de las celdas de gridview individuales
  • Android gridview se estrella en Galaxy 3
  • Visualización de imágenes de la tarjeta sd en gridview android
  • Cómo rellenar una vista de cuadrícula en XML
  • ¿Por qué hay ListVIew en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.