2012-04-26 68 views
1

我有一个小部件用一些下载的信息(其中包括从给定的URL下载的图像)填充列表。Android - 从下载资源中的Widget RemoteView setImageViewBitmap

我想使用setImageViewBitmap显示这个图像与从URL创建的位图。我可以成功地创建位图,但我面临一个问题:当我使用

itmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(item.getPosterUrl()).getContent()); 
remoteViews.setImageViewBitmap(R.list_item.poster, bitmap); 

的图像被成功窗列表上显示,但是下载的是一种缓慢的(和一般的这个应该在任何网络操作中完成),所以我想用一个线程在后台执行下载,而用户可以看到列表的其余部分。

我的问题是,当我使用线程,下载执行得很好,但remoteViews没有更新图像。我也试着用一个Handler来得到相同的结果。

也许我需要一些runOnUIThread,但我没有找到类似的方法的部件。

我该怎么办?

由于提前,

回答

3

第1步:下载图像。

第2步:当下载完成后,然后更新应用程序插件,使用图像,通过RemoteViewsAppWidgetManager

UPDATE

要澄清一点,你不能可靠地下载在主应用程序线程中调用了一个AppWidgetProvider - onUpdate(),因此下载可能需要很长时间。

但是,onUpdate()可以将其工作委托给IntentService,该工作下载图像并更新应用窗口小部件本身。 AppWidgetProvider的地方更新应用程序小部件,但您的应用程序中的其他代码也可以更新应用程序小部件。只需让您的IntentService创建RemoteViews,获得AppWidgetManager,并进行更新。

+0

如果我想更新多个remoteviews基本上与照片的联系人列表,我该怎么做。我尝试了上面提到的方法,但它总是更新第一个视图。你可以帮我吗?例如:在我的小部件中,我显示了5个联系人。我加载每张照片并每次调用appwidgetmgr.update。它总是更新第一个项目。 – Meher 2012-09-07 11:59:51

+0

@meher:这与原始问题或我的回答没有直接关系。请通过右上角的提问按钮提出一个新问题。 – CommonsWare 2012-09-07 12:07:52