如何通知Android Widget重画

2024-02-09

我有一个 Android Widget 使用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 gets a onReceive致电要求更新(ACTION_APPWIDGET_UPDATE)因此我上面的代码运行。但是,在我的代码运行和更新之后feedItems,即使滚动时 UI 也不会更新。

所以我的问题是:如何使 UI 无效并告诉它重绘所有视图?

到目前为止我已经尝试过:

appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.widget_list);

但这也叫onDataChanged这会导致无限循环,所以我不能使用它。


这个问题的解决方案是使用LocalBroadcastManager发送消息RemoteViewsFactory to the AppWidgetProvider。有关示例,请参见此处:Android onReceive 未调用 https://stackoverflow.com/questions/35263508/android-onreceive-not-called

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通知Android Widget重画 的相关文章

随机推荐