android – Picasso:将图像加载到widget listview

前端之家收集整理的这篇文章主要介绍了android – Picasso:将图像加载到widget listview前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
根据本教程,我正在使用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:

报道了一个问题:https://github.com/square/picasso/issues/587

解决方法

在我自己努力之后,我决定阻止后台线程是确定的(与毕加索使用.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);
    }

表现非常顺利,没有加载的动力,我对结果非常满意.

猜你在找的Android相关文章