【问题标题】:Resume old activity by passing new data in bundle通过在捆绑包中传递新数据来恢复旧活动
【发布时间】:2014-06-23 16:28:38
【问题描述】:

我有几个活动,比如 A、B、C。活动 A 开始 B,B 开始 C 等等。在我的应用程序中,我放置了一个导航抽屉,允许用户返回活动 A。当用户返回活动 A 时,我传递了一些标志,这些标志实际上并没有重新启动活动,而只是恢复它。

intent = new Intent(activity, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
        | Intent.FLAG_ACTIVITY_SINGLE_TOP);

现在我正在尝试使用捆绑包传递一些数据。

    bundle.putInt("selectedTab", FEATURED_COUPONS);
    intent.putExtras(bundle);

但在我的活动 A 中,捆绑包始终为空。

if(bundle != null)
{
    if(bundle.containsKey("selectedTab"))
    {
        int tab = bundle.getInt("selectedTab");
    }
}

【问题讨论】:

  • 发布获取捆绑包的代码并启动活动 A

标签: android android-intent android-activity android-bundle


【解决方案1】:

你做事的方式不对。

如果您只想将Integer 额外添加到Intent 额外中,请不要这样做...

bundle.putInt("selectedTab", FEATURED_COUPONS);
intent.putExtras(bundle);

来自putExtras(Bundle extras)的文档...

向意图添加一组扩展数据。 键必须包含包前缀,例如应用程序 com.android.contacts 将使用“com.android.contacts.ShowAll”之类的名称。

而只是使用...

intent.putExtra("selectedTab", FEATURED_COUPONS);

但是,这不是问题的真正原因。正如 Sumit Uppal 所提到的,您应该在 Activity A 中实现 onNewIntent(Intent intent)。然后您可以使用它将“当前”Intent 设置为新的 Intent...

@Override
protected void onNewIntent(Intent intent) {
    if (intent != null)
        setIntent(intent);
}

那么在onResume()你可以使用...

Intent intent = getIntent();

...然后从 Intent 获取 Bundle

【讨论】:

  • 有点晚了,不过我刚刚偶然发现了这个解决方案,经过3个小时的搜索终于结束了我的痛苦!!!
  • 这正是我想要的。非常感谢!
  • 当您使用 ACTION_MAIN 调用启动器活动时,有什么办法可以做到这一点?
  • 请帮助..我也试图通过将 Intent intent = get Intent() 代码放入 onResume() 来实现我的代码,但我仍然没有从一个活动传递到另一个活动。请记住,我在不同的设备上同时有 2 个用户,但使用相同的应用程序。我正在尝试将值从 Rider 传递给 Driver,但仍然为 null。
【解决方案2】:

我认为你应该在 onNewIntent(Intent) 方法中执行“if(bundle != null)”任务

【讨论】:

  • 是接收应用还是发送应用的 onNewIntent(intent) 方法?
【解决方案3】:

如果要将数据传递给已创建的活动,则必须使用 startActivityForResult 并覆盖活动 A 中的 onActivityResult 方法。

相反,如果您再次创建活动,我建议在活动中使用 finish(),在 startActivity 方法之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多