使用singleTop启动模式将活动结果转发给父级

Joe*_*Joe 2 android

我有两个活动:MainListActivity和DetailViewActivity.DetailViewActivity设置为android:launchMode="singleTop".

单击"主列表"活动中的项目时,它会通过以下方式启动"详细信息视图"活动:

startActivityForResult(detailIntent, REQUEST_CODE_DETAIL);
Run Code Online (Sandbox Code Playgroud)

如果我然后在Detail活动中调用setResult(RESULT_OK, resultData);,那么finish();"主列表"活动的onActivityResult(..)方法正确地接收了resultData .

但是,如果我在Detail活动中实现"see previous"/"see next"类型的导航,并使用singleTop实现它,则该结果不再被发送回初始活动:

Intent nextItemIntent = this.createIntent(nextId);
nextItemIntent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(nextItemIntent);
// at this point, my DetailActivity's onNewIntent() method is called, and the new data is loaded properly
Run Code Online (Sandbox Code Playgroud)

但在这里,当我打电话setResult(..)finish()我MainList活动永远不会收到新的/更新的结果.

谁知道我做错了什么?

Joe*_*Joe 5

呸......我的错.看起来问题是FLAG_ACTIVITY_FORWARD_RESULT.很显然的是,标志使用的时候需要FLAG_ACTIVITY_SINGLE_TOPonNewIntent(..)..所以通过设置FLAG_ACTIVITY_FORWARD_RESULT,我其实是告诉Android的转发我的结果数据的一个活动再往前追溯堆栈(MainListActivity前活动)上.

我删除了那个标志,它现在按预期工作:

Intent nextItemIntent = this.createIntent(nextId);
nextItemIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(nextItemIntent);
Run Code Online (Sandbox Code Playgroud)

一切都很好.