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按钮小部件,这个特定小部件的名称是啥?