2
我有一个Android Widget使用RemoteViewsFactory
为了填充ListView。如何通知Android Widget重绘
我的数据源是一个可以随时完成的异步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
这将导致一个无限循环,所以我不能使用。
你试过'invalidateViews();' –
@MustansarSaeed这只会在ListView上可用。我使用的是RemoteViewsFactory,这意味着它是一个RemoteView,不存在这样的调用。 – automaton
答案是使用LocalBroadcastManager来做到这一点,请参阅http://stackoverflow.com/questions/35263508/android-onreceive-not-called – automaton