我搜遍了所有关于它的类似帖子,但找不到解决方案!
我的情况是我有一个活动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
}
}
}
来自onActivityResult
的fragment
成功被称为,正确的requestCode
但resultCode
总是0,意图总是null
。
我在onActivityResult
A下没有其他Activity
实现。
事实上,我也尝试用activity
从fragment
开始getActivity().startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);
并在onActivityResult
A上实施Activity
,但它发生了相同,对requestCode
但错误的resultCode
和intent
。
我正在使用Sherlock Action Bar
所以我的fragment
是SherlockListFragment
所以我使用support library (r18)
。
你能帮助我吗?谢谢
结果代码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,则设置它的结果代码)。
我花了一些时间找出原因。我的错误是把super.onBackPressed()
放在onBackPress()
方法中。
我在方法中打电话给finish()
。但我认为super.onBackPressed()
会自动调用finish()
,所以你总是得到resultCode 0。所以只需删除super.onBackPressed()
方法中的onBackPressed()
行。