我有一个使用RemoteViewsFactory
的Android Widget来填充ListView。
我的数据源是异步JSON调用,可以随时进行(它不是推送通知)。现在代码位于onDataChanged
,看起来像这样:
@Override
public void onDataSetChanged() {
// Subsequent calls to get the data.
// Called when the widget onReceive ACTION_APPWIDGET_UPDATE procs.
newsGetter.updateListFeed(null, new NewsGetter.OnUpdateListFeedFinishedListener() {
@Override
public void onUpdateListFeedFinished(VolleyError error) {
//called when async call has finished. not sure what to call here?
}
});
Log.e(TAG, "******************************** onDataSetChanged PROVIDER");
}
每小时(我已将updatePeriodMillis
设置为每小时更新一次)我的AppWidgetProvider
会收到onReceive
来电,要求更新(ACTION_APPWIDGET_UPDATE
),因此我上面的代码运行。但是,在我的代码运行并更新feedItems
之后,即使滚动,UI也永远不会更新。
所以我的问题是:如何让UI无效并告诉它重绘所有视图?
到目前为止,我已尝试过:
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.widget_list);
但是这也会调用onDataChanged
会导致无限循环,所以我无法使用它。
答案 0 :(得分:1)
此问题的解决方案是使用LocalBroadcastManager
从RemoteViewsFactory
向AppWidgetProvider
发送消息。有关示例,请参见此处:
Android onReceive not called