我有一个使用RemoteViewsFactory
的Android小部件,用于填充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
,这将导致无限循环,因此我不能使用它。
invalidateViews();
吗? - Mustansar Saeed