在onActivityResult错误requestCode在onActivityResult错误r

2019-05-14 01:00发布

我开始从我的片段与新活动

startActivityForResult(intent, 1);

并且要处理的结果,在该片段中的父活动:

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

问题是,我从来没有得到requestCode我刚刚张贴到startActivityForResult()

我像0x400010x20001等具有随机更高位设置。 该文档不说这事。 有任何想法吗?

Answer 1:

您呼叫startActivityForResult()从你的Fragment 。 当你这样做时, requestCode通过改变Activity拥有该Fragment

如果你想获得正确的resultCode您的活动试试这个:

更改:

startActivityForResult(intent, 1);

至:

getActivity().startActivityForResult(intent, 1);


Answer 2:

请求代码是没有错的。 当使用支持v4的文库片段,片段指数在请求码的高16位进行编码和您的请求代码是在低16位。 片段指数稍后用于找到正确的片段传递的结果。

因此,对于活动启动形式片段对象,处理onActivityResult requestCode象下面这样:

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


Answer 3:

更轻松:

int unmaskedRequestCode = requestCode & 0x0000ffff

检查低16位,只是揭露它做逻辑与高16位清零

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

    final int unmaskedRequestCode = requestCode & 0x0000ffff

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

    }
}


Answer 4:

如果您提供恒定的把它公开,然后在使用startActivityResult

例:

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


Answer 5:

您也可以定义
super.onActivityResult(requestCode, resultCode, data)
Activity (如果重写onActivityResult )在此

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

        ...

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

并调用startActivityForResult(intent, requestCode)的内部Fragment



Answer 6:

在片段

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

在主要活动:

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


文章来源: Wrong requestCode in onActivityResult