根据本教程,我正在使用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项目包含文本&图像,为图像加载我使用毕加索.
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; }
当图像加载时,它会打破布局.
什么可能是一个可能的问题?还是我做错了什么?
无图像加载:
图像加载后的外观:
更新:
同样的情况,如果我只是添加一些嵌套的远程视图(所有膨胀从一个布局)
UPDATE2:
解决方法
在我自己努力之后,我决定阻止后台线程是确定的(与毕加索使用.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; }
如果你知道图像的大小(如果它总是相同或可以预测的),你可能想要做这样的事情,以减少调整大小的抖动:
@Override public RemoteViews getLoadingView() { return new RemoteViews(context.getPackageName(),R.layout.v2_widget_item_loading); }
表现非常顺利,没有加载的动力,我对结果非常满意.