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


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

  • Obtener el identificador de diseño de cadena, no funcionará
  • Modificación del widget de barra de búsqueda de Android para que funcione verticalmente
  • Cómo configurar RecyclerView en el widget android
  • Cómo acceder a una base de datos SQL desde una aplicación de widget
  • ¿Cómo resolver el tamaño de pantalla de Android para diferentes dispositivos móviles?
  • Android clicable Widget con ListView no se puede hacer clic en ListItems
  • Cómo agregar widgets múltiples en una aplicación?
  • Widget de control de energía mostrado durante un breve momento al actualizar mi propio widget a través de AppWidgetManager, ¿cuál es el problema?
  • 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

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.