情况:
我有三个活动是这样的
活动 A/片段 A --> 活动 B/片段 B --> 活动 C/片段 C
我的最终目标是将结果从 C 检索回 A。我已经使用 startactivityforresult() 完成了此操作。
问题:
在活动 C 中,我按向上导航或后退按钮,然后从 B 重新进入活动 C。之后,我完成活动并按 OK。我设置结果并完成。活动 B 在 onActivityResult 中检索结果,一切正常(请求代码为 0,结果代码等于 RESULT_OK)。然后,活动 B 设置相同的结果并完成。但是,在活动 A 中调用 onActivityResult 时,为什么结果代码为 0 且数据为 null?
我认为开始活动结果只会将结果发送回以前的直接活动。
活动A
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.activity_search_fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(v.getContext(), SearchActivity.class), REQUEST_RESTAURANT);
}
});
活动B
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), AddActivity.class);
intent.putExtra(EXTRA_YELP_RESTAURANT, mRestaurant);
((Activity)v.getContext()).startActivityForResult(intent, FavoritesActivity.REQUEST_RESTAURANT);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == FavoritesActivity.REQUEST_RESTAURANT) &&
(resultCode == Activity.RESULT_OK)) {
setResult(resultCode, data);
finish();
}
}
活动 C
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add_done_check:
Intent data = new Intent();
data.putExtra(EXTRA_MY_RESTAURANT, mRestaurant);
getActivity().setResult(Activity.RESULT_OK, data);
getActivity().finish();
break;
default:
return false;
}
return true;
}
问题似乎是,当按下向上导航按钮时,为活动 B 创建了一个新意图。这以某种方式删除了活动 A 和活动 B 之间的 startactivityforresult() 关系(这种关系是如何工作的我不太清楚)。解决方案是重用以前的活动 B,而不是通过执行以下操作创建另一个活动 B:
android:launchmode="singleTop"
在活动 B 的清单文件中