情况:
我有三个活动就是这样
活动A /片段A - >活动B /片段B - >活动C /片段C
我的最终目标是将结果从C返回到A.我使用startactivityforresult()完成了这项工作。
问题:
在活动C中,我按向上或向后导航键,然后从B重新输入活动C.然后,我完成活动并按确定。我设定结果并完成。 Activity B在onActivityResult中检索结果,一切都很好(请求代码好0,结果代码等于RESULT_OK)。然后,活动B设置相同的结果并完成。但是,当在活动A中调用onActivityResult时,为什么结果代码0和数据为空?
我认为startactivityforresult只会将结果发送回之前的直接活动。
活动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;
}
答案 0 :(得分:0)
问题似乎是当按下导航按钮时,为活动B创建了一个新意图。这以某种方式删除了活动A和活动B之间的startactivityforresult()关系(这种关系如何运作我' m不太清楚)。解决方案是重复使用之前的Activity B,而不是通过执行以下操作来创建另一个:
android:launchmode="singleTop"
在活动B的清单文件中