我正在开发一个使用 RemoteViews 来显示 ListView 的 appwidget。为简单起见,我将类比 appwidget 的功能:
- 用户将选择将应用小部件添加到主屏幕。选择小部件后,将启动配置活动,并且用户从配方列表中选择一个配方。
- 从配置活动中选择配方后,配置活动会广播 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 在实际调用时更新?我究竟做错了什么?谢谢!