从连续的活动中获得结果



情况:

我有三个活动是这样的

活动 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 的清单文件中

相关内容

  • 没有找到相关文章

最新更新