如何通知AndroidWidget重绘
How to notify Android Widget to redraw
我有一个 Android 小部件使用 RemoteViewsFactory
来填充 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
,这会导致无限循环,所以我不能使用它。
此问题的解决方案是使用 LocalBroadcastManager
从 RemoteViewsFactory
向 AppWidgetProvider
发送消息。有关示例,请参见此处:
我有一个 Android 小部件使用 RemoteViewsFactory
来填充 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
,这会导致无限循环,所以我不能使用它。
此问题的解决方案是使用 LocalBroadcastManager
从 RemoteViewsFactory
向 AppWidgetProvider
发送消息。有关示例,请参见此处: