更改后退导航意图的意图附加内容

时间:2016-02-27 11:33:58

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

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

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

现在我有两种方法可以按活动C中的后退按钮:

  • 如果活动B仍然在活动堆栈中并且没有被销毁,那么一切都很好。活动C关闭,活动B进入视野。
  • 如果我通过按主页按钮离开活动C并在返回活动C之前执行其他操作,则活动B通常会被销毁。现在,当我按下活动C中的后退按钮时,将使用具有" autoContinue" = true的Intent创建活动B,并立即再次启动活动C.

我尝试在活动B onCreate中从意图中删除该标记,但它不起作用:

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

从活动C导航回来时如何从意图附加内容中删除" autoContinue" = true标志?

2 个答案:

答案 0 :(得分:1)

您正在从正确的方向移除额外内容的正确轨道。但是,与Intent相关联的Activity仍有额外费用。删除额外内容后,您需要致电setIntent()。所以你的代码看起来像这样:

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

答案 1 :(得分:-1)

如果您使用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.