Android 小部件:updateAppWidget() 未调用 onDataSetChanged

Posted

技术标签:

【中文标题】Android 小部件:updateAppWidget() 未调用 onDataSetChanged【英文标题】:Android Widgets: onDataSetChanged not called by updateAppWidget() 【发布时间】:2012-09-06 22:52:37 【问题描述】:

我有一个运行良好的基于​​ ListView 的小部件,它依赖于 JSON Web 服务调用来填充自身。我有一个效果很好的刷新按钮,并强制从网络重新加载。我通过使用自定义广播来做到这一点,然后依次调用 onDataSetChanged() 和 updateAppWidget()。我发现,当 android 自动更新小部件时(基于时间间隔设置它我的 XML 定义),似乎只调用了 updateAppWidget(),并且我的 onDataSetChanged() 函数从不运行,导致更新的时间戳(我在每个 updateAppWidget() 调用中更新),但数据陈旧。

如何强制 Android 在给定的时间间隔调用或触发 onDataSetChanged()?

【问题讨论】:

你有没有在远程适配器上调用notifyDataSetChanged() 没有。我什么时候/应该这样做?好像自动更新代码没有给我回调? 我认为,在更新时,你应该对你的适配器有一些参考(不确定你想如何保存它),然后可以调用它的通知。 onDataSetChanged() 仅在通知发送后调用。 要清楚,在我的 AppWidgetProvder.onUpdate() 中,我应该使用小部件 ID 和 ListView 的 ID 调用 AppWidgetManager.notifyAppWidgetViewDataChanged 来更新?现在试试看:) 听起来不错。如果没有,您可能必须直接在列表的适配器上调用它。 (myListView.getAdapter().notifyDataSetChanged()) 【参考方案1】:

原来我需要在我的 AppWidgetProvider.onUpdate() 方法中调用 AppWidgetManager.notifyAppWidgetViewDataChanged(widgetId, view)

【讨论】:

以上是关于Android 小部件:updateAppWidget() 未调用 onDataSetChanged的主要内容,如果未能解决你的问题,请参考以下文章

Android:配置小部件(不同小部件实例的相同 setOnClickPendingIntent 附加功能)

带有下拉列表的android按钮小部件,这个特定小部件的名称是啥?

Android桌面小部件AppWidget开发

Android 桌面小部件(AppWidgetProvider)的应用

使用 Android 小部件

Android 小部件不更新