onActivityResult中的requestCode错误

我开始一个新的活动从我的片段

startActivityForResult(intent, 1);

并且想要在Fragment的父Activity中处理结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult, requestCode: " + requestCode + ", resultCode: " + resultCode);
if (requestCode == 1) {
// bla bla bla
}
}

问题是我从来没有得到我刚刚发布到startActivityForResult()requestCode

我得到了一些像0x400010x20001等随机较高的位集。医生对此只字未提。什么好主意吗?

72753 次浏览

你从你的Fragment调用startActivityForResult()。当你这样做时,requestCode被拥有FragmentActivity改变。

如果你想在你的活动中得到正确的resultCode,试试这个:

变化:

startActivityForResult(intent, 1);

:

getActivity().startActivityForResult(intent, 1);

如果你正在提供常量,将其设为public,然后在startActivityResult中使用

例子:

public static final int REQUEST_CODE =1;
getActivity().startActivityForresult(intent, REQUEST_CODE);

请求代码没有错。当使用v4支持库片段时,片段索引编码在请求代码的前16位,而您的请求代码编码在底部16位。片段索引稍后用于查找交付结果的正确片段。

因此,对于从片段对象开始的活动,处理onActivityResult requestCode如下所示:

originalRequestCode = changedRequestCode - (indexOfFragment << 16)
6             =      196614        -       (3 << 16)

也可以定义
super.onActivityResult(requestCode, resultCode, data) < br > 在Activity中(如果你重写__abc1) 在这个< br > < / p >

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {


...


default:
super.onActivityResult(requestCode, resultCode, data);
}
}

并在Fragment中调用startActivityForResult(intent, requestCode)

简单:

< p > Java: int unmaskedRequestCode = requestCode & 0x0000ffff < / p > < p > 芬兰湾的科特林: val unmaskedRequestCode = requestCode and 0x0000ffff < / p >

检查下16位,只是做一个逻辑和与上16位归零

protected void onActivityResult(int requestCode, int resultCode, Intent data) {


final int unmaskedRequestCode = requestCode & 0x0000ffff


if(unmaskedRequestCode == ORIGINAL_REQUEST_CODE){
//Do stuff


}
}

在片段

  getActivity().startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);

主要活动:

if (requestCode == PLACE_PICKER_REQUEST) {
if (resultCode == RESULT_OK) {
//what ever you want to do
}