从活动中获得结果

时间:2016-01-23 05:15:06

标签: android android-fragments startactivityforresult

情况:

我有三个活动就是这样

活动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;
}

1 个答案:

答案 0 :(得分:0)

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

android:launchmode="singleTop"

在活动B的清单文件中