0

情况:

我有三项活动位于这样

Activity A/Fragment A --> Activity B/Fragment B --> Activity C/Fragment C

我的最终目标是将结果从 C 检索回 A。我使用 startactivityforresult() 完成了此操作。

问题:

在活动 C 中,我按下导航向上或后退按钮,然后从 B 重新进入活动 C。之后,我完成活动并按确定。我设置结果并完成。活动 B 在 onActivityResult 中检索结果,一切正常(请求代码为 0,结果代码等于 RESULT_OK)。然后活动 B 设置相同的结果并完成。但是,在Activity A中调用onActivityResult时,为什么结果码为0,数据为null呢?

我认为 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;
}
4

1 回答 1

0

问题似乎是,当按下向上导航按钮时,为 Activity B 创建了一个新意图。这以某种方式删除了 Activity A 和 Activity B 之间的 startactivityforresult() 关系(这种关系如何工作我不太清楚)。解决方案是重用之前的 Activity B,而不是通过执行以下操作创建另一个:

android:launchmode="singleTop"

在活动 B 的清单文件中

于 2016-01-23T06:43:32.900 回答