Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 片段startActivityForResult在ActivityResult的回调上始终返回resultCode 0和intent null_Android_Android Intent_Android Fragments_Onactivityresult - Fatal编程技术网

Android 片段startActivityForResult在ActivityResult的回调上始终返回resultCode 0和intent null

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

我到处搜索,有类似的帖子,但找不到解决方案

我的情况是,我有一个活动A,其中包含一个
片段
,我想从该
片段
开始一个新的
活动
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 B
finish()
时,Android会自动恢复以前的状态。因此,如果您手动创建另一个片段实例,它将替换获得返回意图的片段实例。我检查了,在清单中或创建意图时没有任何特殊标志。ActivityB(执行setResult的那一个)中getParent的值为nullAwesome,谢谢。我的问题是我的清单中有launchMode=“singleTask”。@elimirks你能解释一下你是如何解决问题的吗?我需要启动
launchMode=“singleTask”
,但我仍然喜欢启动一个新的活动。@mariosangiorgio singleTask启动模式仅适用于独立活动。我也遇到了同样的问题,这条评论保护了我!谢谢:)您不需要删除super.onBackPressed(),只需将setResult()代码放在super.onBackPressed()之前