Picasso: cargar imágenes en widget listview

Estoy implementando widget con listview basado en este tutorial: http://laaptu.wordpress.com/2013/07/24/populate-appwidget-listview-with-remote-datadata-from-web/ (código fuente: https: //github.com/laaptu/appwidget-listview/tree/appwidget-listview2/ ).

El elemento ListView contiene texto e imagen, para la carga de la imagen Uso Picasso.

Implementación getViewAt:

public RemoteViews getViewAt(int position) { final RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.listview_item); ListItem listItem = listItemList.get(position); remoteView.setTextViewText(R.id.headline, listItem.headline); final String imageUrl = listItem.image; handler.post(new Runnable() { @Override public void run() { if (!Utils.isEmpty(imageUrl)) { picasso.load(imageUrl) .placeholder(R.drawable.empty_photo) .into(remoteView, R.id.picture, new int[] { appWidgetId }); } } }); return remoteView; } 

Cuando la imagen está cargada, rompe el diseño.

¿Qué puede ser un problema posible? ¿O qué estoy haciendo mal?

Sin carga de imagen:

captura de pantalla

Cómo se ocupa la imagen cargada:

captura de pantalla

ACTUALIZAR:

Lo mismo ocurre si solo agrego unas cuantas vistas remotas anidadas (todas infladas desde un diseño)

UPDATE2:

Informar de un problema: https://github.com/square/picasso/issues/587

3 Solutions collect form web for “Picasso: cargar imágenes en widget listview”

Después de luchar con esto yo mismo, decidí que el bloqueo del hilo de fondo estaba bien (usando .get () con Picasso) y era capaz de obtener lo siguiente para trabajar dentro de mi adaptador:

  @Override public RemoteViews getViewAt(int position) { DBItem item = list.get(position); RemoteViews view = new RemoteViews(context.getPackageName(), R.layout.widget_item); try { Bitmap b = Picasso.with(context).load(item.getImageUrl()).get(); view.setImageViewBitmap(R.id.widget_image, b); } catch (IOException e) { e.printStackTrace(); } view.setTextViewText(R.id.widget_title, item.getTitle()); return view; } 

Si conoce el tamaño de la imagen que regresa (si es siempre la misma o se puede predecir), es posible que desee hacer algo así como para reducir los nervios de cambio de tamaño:

  @Override public RemoteViews getLoadingView() { return new RemoteViews(context.getPackageName(), R.layout.v2_widget_item_loading); } 

El rendimiento es muy suave, no hay nervios de carga, estoy bastante contento con el resultado.

Este apoyo se ha añadido ahora, gracias a los grandes chicos en plaza

Así es como lo he usado

 Picasso.with(mContext) .load(imagePath) .into(remoteViews, R.id.some_id, new int[] {mAppWidgetId}); 

Disfrute del desplazamiento suave y con mantequilla 🙂

Puede usar Target Callback para manejar su problema como este

  Picasso.with(mContext) .load(imageUrl) .placeholder(R.drawable.defimage) .into(new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { mRemoteViews.setImageViewBitmap(R.id.myImage,bitmap); } @Override public void onBitmapFailed(Drawable errorDrawable) { //do something when loading failed } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { //do something while loading } }); 

Para más detalles verifique este artículo

  • El método get (String) no está definido para el tipo String error al agregar los códigos a la clase filter del adaptador en android
  • Cómo agregar widgets múltiples en una aplicación?
  • Widget de la aplicación Android con renderizado personalizado
  • ¿Cómo resolver el tamaño de pantalla de Android para diferentes dispositivos móviles?
  • Android - Obtener el widget del cronómetro
  • Widget Android ImageButton pierde imagen cuando se gira la pantalla
  • ¿Hay alguna forma de que los elementos de la interfaz de usuario se superpongan ligeramente (uno encima del otro) sin usar diseños absolutos?
  • Se produjo un error en la transacción del encuadernador al colocar un mapa de bits dinámicamente en un widget.
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.