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

时间:2010-06-01 16:00:34

标签: android

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

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

startActivityForResult(detailIntent, REQUEST_CODE_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

但是从这里开始,当我调用setResult(..)finish()时,我的MainList活动永远不会收到新的/更新的结果。

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分: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);

一切都很好。