片段startActivityForResult始终在回调onActivityResult上返回resultCode 0和intent null

nir*_*vik 4 android android-intent android-fragments onactivityresult

我搜遍了所有关于它的类似帖子,但找不到解决方案!

我的情况是我有一个活动A,它持有一个fragment,并且从那里fragment我想开始一个新的ActivityB应该返回一些值fragment.

fragment

startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)

ActivityB上,返回数据

Intent returnIntent = new Intent();
returnIntent.putExtra(SerializationConstants.isSearchSaved, mAbItemsShown.ordinal());
setResult (ConstantsUtils.SUCCESS_RETURN_CODE, returnIntent);
finish();
Run Code Online (Sandbox Code Playgroud)

在片段上

@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 
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

onActivityResultfragment成功调用,有权requestCoderesultCode总是0,意图总是null.

onActivityResultActivityA 下没有其他实现.

其实,我也试着开始activityfragmentgetActivity().startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE); 和实施onActivityResultActivityA,但它发生的一样吧requestCode,但错误resultCodeintent.

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

你能帮助我吗?谢谢

ese*_*sov 11

结果代码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.
Run Code Online (Sandbox Code Playgroud)

获取此代码的常见原因是在新任务中启动活动(检查标记的意图和清单,这将导致新任务的启动).

此外,如果您有父活动,则应设置它的结果代码而不是设置其子项的结果代码(尝试getParent并且如果它不是null,则设置它的结果代码).

  • 太好了,谢谢.对我来说问题是我的清单中有launchMode ="singleTask". (3认同)

小智 5

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

我调用finish()了该方法。但是我认为super.onBackPressed()它将finish()自动调用,因此您将始终获得resultCode 0。因此,只需删除方法中的super.onBackPressed()行即可onBackPressed()