Android 片段startActivityForResult在ActivityResult的回调上始终返回resultCode 0和intent null
我到处搜索,有类似的帖子,但找不到解决方案 我的情况是,我有一个活动A,其中包含一个Android 片段startActivityForResult在ActivityResult的回调上始终返回resultCode 0和intent null,android,android-intent,android-fragments,onactivityresult,Android,Android Intent,Android Fragments,Onactivityresult,我到处搜索,有类似的帖子,但找不到解决方案 我的情况是,我有一个活动A,其中包含一个片段,我想从该片段开始一个新的活动B,它应该向片段返回一些值 在片段上 startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE); 在活动B上,返回数据 Intent returnIntent = new Intent(); returnIntent.putExtra(SerializationConstants.isSearchS
片段
,我想从该片段
开始一个新的活动
B,它应该向片段
返回一些值
在片段上
startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);
在活动
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
,使用右侧的requestCode
,但resultCode
始终为0,intent始终为null
我在Activity
A下没有其他onActivityResult
实现
事实上,我还尝试使用
getActivity().startActivityForResult(mapIntent,ConstantStutils.TOMAP_请求_代码)代码>
在活动
A上实现onActivityResult
,但发生的情况相同,对请求代码
但错误结果代码
和意图
我使用的是Sherlock动作条
,所以我的片段
是一个SherlockListFragment
,所以我使用的是支持库(r18)
你能帮我吗?谢谢结果代码0已取消
The resultCode will be RESULT_CANCELED if the activity explicitly returned that, didn't return any result, or crashed during its operation.
获取此代码的常见原因还有在新任务中启动活动(检查意图和清单中的标志,这些标志导致新任务的启动)
另外,如果您有一个父活动,您应该设置它的结果代码,而不是设置它的子活动的结果代码(尝试getParent
,如果它不为空,则设置它的结果代码)。我花了一些时间来找出原因。我的错误是将super.onBackPress()
放在onBackPress()
方法中
我在方法中调用了finish()
。但是我认为super.onBackPressed()
将自动调用finish()
,因此您将始终获得结果代码0。
因此,只需删除onBackPressed()
方法中的super.onBackPressed()
行。我不知道您的super.onActivityResult(requestCode、resultCode、intent)是什么代码>用于。在我看来,这是没有必要的。另外,您的请求代码需要>=0,正如它提到的[here][doc][doc]:,int)super不是必需的,我只是想看看问题是否是因为它,但如果我不把它放进去,结果是一样的。常量SUCCESS\u RETURN\u代码的值为1,但Activity.RESULT\u ok的值相同。看起来您正在ActivityB的其他地方调用finish()
。在不设置结果代码和结果数据的情况下调用finish()
,将完全导致您描述的行为。或者ActivityB正在崩溃,这将做同样的事情。然后我必须建议您检查活动A,在onStart()
或onResume
部分。如果您创建了一个片段的新实例,在其中调用了startActivityForResult
,这就是问题所在。通常,当您调用activity Bfinish()
时,Android会自动恢复以前的状态。因此,如果您手动创建另一个片段实例,它将替换获得返回意图的片段实例。我检查了,在清单中或创建意图时没有任何特殊标志。ActivityB(执行setResult的那一个)中getParent的值为nullAwesome,谢谢。我的问题是我的清单中有launchMode=“singleTask”。@elimirks你能解释一下你是如何解决问题的吗?我需要启动launchMode=“singleTask”
,但我仍然喜欢启动一个新的活动。@mariosangiorgio singleTask启动模式仅适用于独立活动。我也遇到了同样的问题,这条评论保护了我!谢谢:)您不需要删除super.onBackPressed(),只需将setResult()代码放在super.onBackPressed()之前