onActivityResult의 요청 코드가 잘못되었습니다 data) {

내 조각에서 새로운 활동을 시작하고 있습니다.

startActivityForResult(intent, 1);

Fragment의 부모 활동에서 결과를 처리하려고합니다.

@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()입니다.

내가 좋아하는 뭔가있어 0x40001, 0x20001임의의 높은 비트 세트 등. 문서는 이것에 대해 아무 말도하지 않습니다. 어떤 아이디어?



답변

startActivityForResult()에서 님에게 전화 중 입니다 Fragment. 이 작업을 수행 할 때의 소유주는에 requestCode의해 변경됩니다 .ActivityFragment

resultCode당신의 활동 에서 올바른 것을 얻으려면 이것을 시도하십시오 :

변화:

startActivityForResult(intent, 1);

에:

getActivity().startActivityForResult(intent, 1);


답변

요청 코드가 잘못되었습니다. v4 지원 라이브러리 프래그먼트를 사용하는 경우 프래그먼트 인덱스는 요청 코드의 상위 16 비트로 인코딩되고 요청 코드는 하위 16 비트에 있습니다. 조각 색인은 나중에 결과를 전달할 올바른 조각을 찾는 데 사용됩니다.

따라서 활동이 조각 개체에서 시작되면 다음과 같이 onActivityResult requestCode를 처리하십시오.

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


답변

더 쉬움 :

자바 :
int unmaskedRequestCode = requestCode & 0x0000ffff

코 틀린 :
val unmaskedRequestCode = requestCode and 0x0000ffff

하위 16 비트를 확인하고 논리 AND를 수행하여 상위 16 비트를 0으로 마스크 해제하십시오.

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

    final int unmaskedRequestCode = requestCode & 0x0000ffff

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

    }
}


답변

상수를 제공하는 경우 공개하고 다음에서 사용하십시오. startActivityResult

예:

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


답변

또한 정의 할 수
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


답변

조각으로

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

주요 활동에서 :

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


답변