我的Android application
:
致电
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetManager.updateAppWidget(appWidgetId, getWidgetView(context, appWidgetId));
public void onReceive(Context context, Intent intent)
方法中的根本没有结果。
生成的RemoteViews
看起来有效(以编程方式说)但widget
未更新(它保留旧值)。
我发现了一些类似的问题,但没有人回答:
答案 0 :(得分:5)
解决:
解决方案非常奇怪,但使用
appWidgetManager.updateAppWidget(new ComponentName(context, CustomWidgetProvider.class), getWidgetView(context, appWidgetId));
解决了我的问题。
答案 1 :(得分:4)
@Manitoba发布的解决方案没有完全正常工作,这是放在onUpdate
内的工作代码:
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
// do your stuff
appWidgetManager.updateAppWidget(new ComponentName(context, CustomWidgetProvider.class), views);
希望这会有所帮助:)
答案 2 :(得分:1)
我为xPeria更新小部件所发现的是添加后 .putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,allWidgetIds);
这一行:
<intent>.setData(Uri.withAppendedPath(
Uri.parse("imgwidget://widget/id/"),
String.valueOf(allWidgetIds)));
在哪里
Intent active = new Intent(context, <widget_provider>.class);
答案 3 :(得分:0)
尝试了所有updateAppWidget()
重载,但它无法正常工作 - 无论是来自onReceive()
还是Activity
。
奇怪的是,notifyAppWidgetViewDataChanged()
确实在同一场景中起作用。
编辑:
Android / Launcher必须缓存RemoteViews
,如果您使用完全相同的updateAppWidget()
来调用RemoteViews
- 不会发生重新绑定,尽管文档说的是,我可以清楚地看到我的{{ 1}}未被调用。
因为我需要强制UI重新绑定,最后用一些虚拟布局调用RemoteViewsFactory
,然后立即再次使用正常布局:
updateAppWidget()