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

时间:2013-08-29 13:23:52

标签: android android-intent android-fragments onactivityresult

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

我的情况是我有一个活动A,其中包含fragment,并且fragment我希望启动一个新的Activity B,它应该返回一些值{{1} }}

fragment

fragment

startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE); B上,返回数据

Activity

片段

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 } } } 中的{p> onActivityResult,右fragmentrequestCode始终为0且意图始终为resultCode

null A。

下我没有其他onActivityResult实施

事实上,我也尝试从Activity启动activity fragment 并在getActivity().startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE); A上实施onActivityResult,但它恰好相同,正确Activity但错误requestCoderesultCode

我正在使用intent,因此Sherlock Action Barfragment,因此我使用的是SherlockListFragment

你能帮帮我吗?感谢

2 个答案:

答案 0 :(得分: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,则设置它的结果代码)。< / p>

答案 1 :(得分:4)

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

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