【问题标题】:Android - Widget RemoteView setImageViewBitmap from downloaded resourceAndroid - 来自下载资源的 Widget RemoteView setImageViewBitmap
【发布时间】:2012-04-27 06:45:21
【问题描述】:

我有一个用一些下载信息填充列表的小部件,其中包括从给定 URL 下载的图像。

我想使用 setImageViewBitmap 和从 URL 创建的位图来显示此图像。我可以成功创建位图,但我遇到了一个问题:

当我使用时:

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

图像已成功显示在小部件列表中,但是下载有点慢(通常这应该在任何网络操作中完成)所以我想使用线程在后台执行下载,而用户可以看到列表的其余部分。

我的问题是,当我使用线程时,下载执行良好,但 remoteViews 没有更新图像。我也尝试使用具有相同结果的 Handler。

也许我需要 runOnUIThread 之类的东西,但我没有找到类似的小部件方法。

我能做什么?

提前致谢,

【问题讨论】:

    标签: android multithreading image download widget


    【解决方案1】:

    第 1 步:下载图片。

    第 2 步:下载完成后,通过 RemoteViewsAppWidgetManager 使用图像更新应用小部件

    更新

    澄清一下,您不能可靠地直接在AppWidgetProvider 中下载某些东西——在主应用程序线程上调用onUpdate(),因此下载可能需要很长时间。

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

    【讨论】:

    • 如果我想更新多个远程视图,基本上是带有照片的联系人列表,我该怎么做。我尝试了上面提到的方法,但它总是更新第一个视图。请你帮助我好吗?例如:在我的小部件中,我显示了 5 个联系人。我加载了每张照片并每次都调用 appwidgetmgr.update。它总是更新第一项。
    • @meher:这与原始问题或我的回答没有直接关系。请通过右上角的按钮提出新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    相关资源
    最近更新 更多