从 child Activity 返回时 Activity.getIntent() 中没有额外内容

No extras in Activity.getIntent() when going back to it from a child Activity

我有一个 Activity A,我用一些额外的东西启动它(即将一些数据放入启动 Activity 的 Intent)。从这个 Activity 我启动了另一个 Activity B。问题是当我从 B 回到 A 时,通过调用 finish(),A Activity 的 getIntent() 方法 returns 一个不包含额外内容的 Intent。 所以,我的问题是:这是正常行为吗?有什么方法可以让 Activity A 发出信号,表明我希望它保持最初的 Intent。 哦,请注意我已经覆盖了 Activity A.

中的 onSaveInstanceState()

编辑: 我不再在我的设备上遇到这种行为。而且我没有更改代码中的任何内容。我正在使用 3 年前的设备进行测试。我想知道这是否可能是设备故障引起的?

Is this normal behavior?

是的。以 startActivityForResult 开始 B,并在 A 中覆盖 onActivityResult。在完成 B 调用 setResult(int, intent) 之前,用你想要 return 的数据填充意图给 A。onActivityResult 得到相同的意图,作为第三个参数。

是 行为正常。如果您想从 Activity Y 开始一个 Activity X 并从 X 和 return 到 Y 获取一些数据,那么您必须使用 startActivityForResult(intent,request_code) Then you need to override theonActivity结果()`方法 在创建意图并将数据放入意图后的 Activity X 中,您需要执行以下操作

setResult(RESUKT_OK,i);

`

我明白了。此问题仅在我单击 ActionBar 的后退箭头时发生,而不是在我按下设备的后退按钮时发生。因为当按下后退按钮时 B Activity 的 finish() 方法被调用并且应用程序通常 returns 到已经创建的 Activity A 实例,当默认点击 ActionBar 的后退箭头时由于 Android 横向导航功能,Activity B 不会调用 finish() 方法,而是创建 Activity A 的新实例。所以解决方案是像这样覆盖 ActionBar 的后退箭头单击功能(添加到 Activity B 的方法):

@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
    int itemId = menuItem.getItemId();
    if (itemId == android.R.id.home) {
        onBackPressed();
        return true;
    }
    return super.onOptionsItemSelected(menuItem);
}