Android updateAppWidget不会更新

Man*_*oba 3 android android-appwidget

我的问题很严重Android application:

调用

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetManager.updateAppWidget(appWidgetId, getWidgetView(context, appWidgetId));
Run Code Online (Sandbox Code Playgroud)

在该public void onReceive(Context context, Intent intent)方法中根本没有结果.该RemoteViews所产生看起来是有效的(编程而言),但widget不更新(它保留旧值).

我发现了一些类似的问题,但没有人回答:

Man*_*oba 5

解决了:

解决方案很奇怪,但使用

appWidgetManager.updateAppWidget(new ComponentName(context, CustomWidgetProvider.class), getWidgetView(context, appWidgetId));
Run Code Online (Sandbox Code Playgroud)

解决了我的问题.


Sou*_*HDI 5

@Manitoba发布的解决方案无法完全正常工作,这是放入其中的工作代码onUpdate

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
// do your stuff
appWidgetManager.updateAppWidget(new ComponentName(context, CustomWidgetProvider.class), views);
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助:)


enk*_*kod 5

尝试了所有updateAppWidget()重载,但它就是不起作用 - 无论是从onReceive()还是调用Activity。奇怪的是,notifyAppWidgetViewDataChanged()在相同的场景下确实有效。

编辑:

Android/Launcher 必须是缓存RemoteViews,如果你updateAppWidget()用完全相同的方式调用RemoteViews- 不会发生重新绑定,尽管文档说,我可以清楚地看到 myRemoteViewsFactory没有被调用。因为我需要强制 UI 重新绑定,最终updateAppWidget()使用一些虚拟布局进行调用,然后立即再次使用正常布局进行调用:

            try { 
                mgr.updateAppWidget(widgetId, new RemoteViews(context.getPackageName(), R.layout.dummy)); 
            } finally { 
                mgr.updateAppWidget(widgetId, GetRemoteView(context, widgetId)); 
            }
Run Code Online (Sandbox Code Playgroud)