4

我到处搜索,也有类似的帖子,但找不到解决方案!

我的情况是我有一个包含 a 的 Activity A fragment,并且fragment我想从那里开始一个新的ActivityB ,它应该将一些值返回给fragment.

fragment

startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);

ActivityB 上,返回数据

Intent returnIntent = new Intent();
returnIntent.putExtra(SerializationConstants.isSearchSaved, mAbItemsShown.ordinal());
setResult (ConstantsUtils.SUCCESS_RETURN_CODE, returnIntent);
finish();

在片段上

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

switch (requestCode) {

    case ConstantsUtils.TOMAP_REQUEST_CODE:

            if (resultCode == ConstantsUtils.SUCCESS_RETURN_CODE) {
              //do some stuff 
            }
    }
}

onActivityResultfromfragment被成功调用,with right requestCodebutresultCode始终为 0,intent 始终为null

我在A下没有其他onActivityResult实现。Activity

事实上,我也尝试activityfragmentwith 开始getActivity().startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);onActivityResultActivityA 上实施,但它发生相同,正确requestCode但错误resultCodeand intent

我正在使用Sherlock Action Bar所以我fragment是一个SherlockListFragment所以我正在使用support library (r18).

你能帮助我吗?谢谢

4

2 回答 2

13

结果代码 0 是RESULT_CANCELLED.

The resultCode will be RESULT_CANCELED if the activity explicitly returned that, didn't return any result, or crashed during its operation.

此外,获取此代码的常见原因是在新任务中启动活动(检查您的意图和清单中的标志,这会导致新任务的开始)。

此外,如果您有父活动,您应该设置它的结果代码而不是设置其子活动的结果代码(尝试getParent如果它不为空,则设置它的结果代码)。

于 2013-08-29T13:46:51.980 回答
7

我花了一些时间找出原因。我的错误super.onBackPressed()在于onBackPress()方法。

我调用finish()了方法。但我认为super.onBackPressed()finish()自动调用,所以你总是会得到resultCode 0。所以只需删除方法中的super.onBackPressed()onBackPressed()

于 2017-01-19T15:57:18.090 回答