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

问题描述 投票:3回答:2

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

我的情况是我有一个活动A持有fragment,从那个fragment我想开始一个新的Activity B应该返回一些值到fragment

fragment

startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);

Activity B上,返回数据

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 
            }
    }
}

来自onActivityResultfragment成功被称为,正确的requestCoderesultCode总是0,意图总是null

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

事实上,我也尝试用activityfragment开始getActivity().startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);并在onActivityResult A上实施Activity,但它发生了相同,对requestCode但错误的resultCodeintent

我正在使用Sherlock Action Bar所以我的fragmentSherlockListFragment所以我使用support library (r18)

你能帮助我吗?谢谢

android android-intent android-fragments onactivityresult
2个回答
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.

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

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


4
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.