ab.*_*lly 13 android listview android-widget picasso
我正在使用基于本教程的listview实现小部件:http://laaptu.wordpress.com/2013/07/24/populate-appwidget-listview-with-remote-datadata-from-web/(源代码:https: //github.com/laaptu/appwidget-listview/tree/appwidget-listview2/).
ListView项目包含文本和图像,对于图像加载我使用Picasso.
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;
}
Run Code Online (Sandbox Code Playgroud)
加载图像时,它会破坏布局.
什么可能是一个问题?或者我做错了什么?
没有图片加载:

如何加载图像:

更新:
如果我只是添加几个嵌套的远程视图(所有从一个布局中充气),也会发生同样的情况
UPDATE2:
wbl*_*hko 21
在我自己挣扎之后,我决定阻止后台线程是可以的(使用带有Picasso的.get())并且能够让我的适配器内部工作:
@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;
}
Run Code Online (Sandbox Code Playgroud)
如果您知道图像的大小(如果它总是相同或您可以预测它),您可能想要做这样的事情以减少调整大小的抖动:
@Override
public RemoteViews getLoadingView() {
return new RemoteViews(context.getPackageName(), R.layout.v2_widget_item_loading);
}
Run Code Online (Sandbox Code Playgroud)
性能非常流畅,没有负载抖动,我对结果非常满意.
nga*_*uks 15
由于广场上的伟大人物,现在已经添加了这种支持
这就是我使用它的方式
Picasso.with(mContext)
.load(imagePath)
.into(remoteViews, R.id.some_id, new int[] {mAppWidgetId});
Run Code Online (Sandbox Code Playgroud)
享受黄油平滑滚动:)