如何通知Android Widget重绘

时间:2016-02-08 05:13:51

标签: android android-widget android-appwidget remoteview

我有一个使用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会导致无限循环,所以我无法使用它。

1 个答案:

答案 0 :(得分:1)

此问题的解决方案是使用LocalBroadcastManagerRemoteViewsFactoryAppWidgetProvider发送消息。有关示例,请参见此处: Android onReceive not called