我有一个小部件的多个实例。 当我点击一个小部件时,配置活动按预期启动,活动将检索相应的小部件ID(我跟着this post解释了如何区分意图):
Intent configIntent = new Intent(context, WidgetConfigureDisplayActivity.class);
configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, configIntent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.mood_main_layout, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
所以一切正常,除非我在配置活动中使用主页按钮(而不是后面的按钮) 在主屏幕上,如果我单击另一个窗口小部件实例,则会显示配置活动,但不会使用新窗口小部件实例配置更新(额外的窗口小部件ID未更改)。
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
我认为FLAG_UPDATE_CURRENT标志的目的是更新活动中的小部件ID,但它似乎不起作用(我试图覆盖onNewIntent,onResume方法没有运气)。使用launchMode&其他标志也无济于事。
答案 0 :(得分:0)
在配置意图上添加FLAG_ACTIVITY_CLEAR_TOP可以解决问题。
configIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
此时我只有一项活动,所以我不知道这是否是最好的解决方案,或者这个标志是否会破坏其他导航行为。
任何想法都将不胜感激。
答案 1 :(得分:0)
当你的后退按钮活动被破坏时。当你再次从小部件中调用它时,会调用新的活动实例。但是当你按下主页按钮活动被破坏时,它将保留在内存中并且调用旧实例。因此,最佳做法是在从窗口小部件,服务或广播调用活动时添加标记(FLAG_ACTIVITY_NEW_TASK
)。