主页按钮按下后,配置活动中的小组件ID未更新

时间:2014-03-01 16:20:05

标签: android android-widget

我有一个小部件的多个实例。 当我点击一个小部件时,配置活动按预期启动,活动将检索相应的小部件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&其他标志也无济于事。

2 个答案:

答案 0 :(得分:0)

在配置意图上添加FLAG_ACTIVITY_CLEAR_TOP可以解决问题。

configIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

此时我只有一项活动,所以我不知道这是否是最好的解决方案,或者这个标志是否会破坏其他导航行为。
任何想法都将不胜感激。

答案 1 :(得分:0)

当你的后退按钮活动被破坏时。当你再次从小部件中调用它时,会调用新的活动实例。但是当你按下主页按钮活动被破坏时,它将保留在内存中并且调用旧实例。因此,最佳做法是在从窗口小部件,服务或广播调用活动时添加标记(FLAG_ACTIVITY_NEW_TASK)。