【发布时间】:2016-05-17 16:58:36
【问题描述】:
我有一个使用 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(); -
@MustansarSaeed 这只能在 ListView 上使用。我正在使用 RemoteViewsFactory,这意味着它是 RemoteView,不存在这样的调用。
-
答案是使用 LocalBroadcastManager 来做,见stackoverflow.com/questions/35263508/…
标签: android android-widget android-appwidget remoteview