我有两个活动: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活动永远不会收到新的/更新的结果.
谁知道我做错了什么?
呸......我的错.看起来问题是FLAG_ACTIVITY_FORWARD_RESULT.很显然的是,标志不使用的时候需要FLAG_ACTIVITY_SINGLE_TOP和onNewIntent(..)..所以通过设置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)
一切都很好.