2011-07-26 75 views
2

我正在开发一个appwidget,它使用RemoteViews来显示一个ListView。为了简单起见,我将对appwidget的功能进行类比:Android - AppWidget AppWidgetManager.updateAppWidget()不立即被调用

  1. 用户将选择将appwidget添加到主屏幕。选择小部件后,配置活动启动,用户从配方列表中选择一个配方。
  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在实际调用时更新?我究竟做错了什么?谢谢!

回答

0

嗯,最后我终于解决了这个问题。这有点破解,但我最终通过宣布刷新广播和更新广播来解决问题。每次我想更新小部件时,我都会调用updateAppWidget(),然后从接收和处理此广播的函数中启动另一个调用notifyChanged的广播。这一直在工作!