从 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 the
onActivity结果()`方法
在创建意图并将数据放入意图后的 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);
}
我有一个 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 the
onActivity结果()`方法
在创建意图并将数据放入意图后的 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);
}