【问题标题】:Widget id not updated in configuration activity after home button press按下主页按钮后,配置活动中的小部件 ID 未更新
【发布时间】:2014-03-01 16:20:04
【问题描述】:

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

【问题讨论】:

    标签: android android-widget


    【解决方案1】:

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

    configIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    

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

    【讨论】:

      【解决方案2】:

      当您按下返回按钮时,活动被破坏。当您从小部件再次调用它时,新的活动实例被调用。但是当您按下主页按钮时,活动被破坏,它将保留在内存中并调用旧实例。所以最佳实践是在从小部件、服务或广播调用活动时添加标志(FLAG_ACTIVITY_NEW_TASK)。

      【讨论】:

      • 添加 FLAG_ACTIVITY_NEW_TASK 并没有帮助。我已经试过了。当我回答我的问题时,FLAG_ACTIVITY_CLEAR_TOP 有效。但是我不明白为什么 FLAG_ACTIVITY_NEW_TASK 不能按照文档“在新任务中启动活动。如果您现在正在启动的活动已经在运行任务,则该任务以其最后状态被带到前台已恢复并且活动在 onNewIntent()" 中接收到新意图,而我在 onNewIntent 方法中没有收到任何新意图。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多