【问题标题】:Change intent extras for back navigation intent更改返回导航意图的意图附加内容
【发布时间】:2016-02-27 19:43:55
【问题描述】:

我有一个具有以下流程的应用(同一应用中的所有活动):

  • 活动 A 以 startActivity 启动活动 B。它可能会额外添加一个布尔值“autoContinue”=true。
  • 当活动 B 开始时,它会检查 onCreate 中的“autoContinue”标志和 getIntent().hasExtra("autoContinue")。如果标志为真,它会立即使用 startActivity 启动活动 C。

现在我有两种情况可以在活动 C 中按下后退按钮:

  • 如果活动 B 仍在活动堆栈中并且没有被销毁,则一切正常。活动 C 关闭,活动 B 进入视野。
  • 如果我通过按主页按钮离开活动 C 并在返回活动 C 之前做一些其他事情,活动 B 通常会被破坏。现在,当我在活动 C 中按下后退按钮时,将使用具有“autoContinue”=true 的 Intent 创建活动 B,并立即再次启动活动 C。

我尝试从活动 B 的 onCreate 中的 Intent 中删除标志,但它不起作用:

final Intent intent = getIntent();
final Bundle extras = intent.getExtras();
if (extras.containsKey("autoContinue")) {
    intent.removeExtra("autoContinue");
    continue();
}

从活动 C 导航返回时,如何从 Intent Extras 中删除“autoContinue”=true 标志?

【问题讨论】:

    标签: android android-intent android-activity activity-stack


    【解决方案1】:

    您在从意图中删除额外内容方面处于正确的轨道上。然而,与Activity 关联的Intent 仍然有额外的内容。删除多余的内容后,您需要致电setIntent()。所以你的代码看起来像这样:

    final Intent intent = getIntent();
    final Bundle extras = intent.getExtras();
    if (extras.containsKey("autoContinue")) {
        intent.removeExtra("autoContinue");
        setIntent(intent);
        continue();
    }
    

    【讨论】:

    • setIntent 在这里没有做任何事情,你只是传回了相同的引用
    【解决方案2】:

    如果您已使用startActivityForResult 方法开始活动,则可以在完成时将附加内容传递给先前的活动。请看以下代码示例:

    public void finishActivity() {
            Intent returnIntent = new Intent();
            returnIntent.putExtra("KEY", "Value");
            getActivity().setResult(Activity.RESULT_OK, returnIntent);
            getActivity().finish();    
    }
    

    另外,我建议您不要对密钥进行硬编码。 Read the blog post that I have written on this topic.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多