我有两个活动: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活动永远不会收到新的/更新的结果。
任何人都知道我做错了什么?
答案 0 :(得分:5)
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);
一切都很好。