2

我正在开发一个使用 RemoteViews 来显示 ListView 的 appwidget。为简单起见,我将类比 appwidget 的功能:

  1. 用户将选择将应用小部件添加到主屏幕。选择小部件后,将启动配置活动,并且用户从配方列表中选择一个配方。
  2. 从配置活动中选择配方后,配置活动会广播 AppWidgetManager.ACTION_APPWIDGET_UPDATE 意图。这个意图在我的 AppWidgetProvider 类的 onReceive 方法中接收和处理。从这里 RemoteView 被实例化并传递给 AppWidgetManager.updateAppWidget() 方法。这将继续填写成分的 ListView。

这一切都按预期工作,除非我尝试从 appwidget 手动更新 ListView。我设置了一个 PendingIntent 来重新启动配置活动,它也可以工作。不幸的是,对 AppWidgetManager.updateAppWidget() 的调用不会像在将其添加到主屏幕后启动时那样立即调用,并且 ListView 不会得到更新。但是,在向下滚动列表一种方式之后,确实会调用更新(我认为,直到它通过了它在缓存中加载的行数)。这会触发我的 FlightBoardAppWidgetService 和 ViewsFactory 。就好像 updateAppWidget 被放入了一些延迟加载的队列。我试图查看 Android 源代码以了解 AppWidgetManager.updateAppWidget() 是如何编码的,但它似乎被隐藏了。

tl; dr: AppWidgetManager.updateAppWidget() 并不总是立即被调用,有什么用?

有没有办法让 ListView 在实际调用时更新?我究竟做错了什么?谢谢!

4

1 回答 1

0

好吧,我最终解决了这个问题。这有点像 hack,但我最终通过声明刷新广播和更新广播解决了这个问题。每次我想更新我调用 updateAppWidget() 的小部件时,然后从接收和处理此广播的函数中,我启动另一个调用 notifyChanged 的​​广播。这一直有效!

于 2011-09-22T17:57:43.603 回答