1

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

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

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

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

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

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

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

4

2 回答 2

4

你在从意图中删除额外内容的正确轨道上。然而,与Intent相关的Activity仍然有额外的东西。您需要setIntent()在删除多余的内容后致电。因此,您的代码将如下所示:

final Intent intent = getIntent();
final Bundle extras = intent.getExtras();
if (extras.containsKey("autoContinue")) {
    intent.removeExtra("autoContinue");
    setIntent(intent);
    continue();
}
于 2016-02-27T11:41:34.313 回答
-1

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

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

另外,我想建议您不要对密钥进行硬编码。阅读我写的关于这个主题的博客文章。

于 2016-02-27T11:43:55.307 回答