programing

잘못된 요청 활동 결과 코드 입력

i4 2023. 8. 29. 20:08
반응형

잘못된 요청 활동 결과 코드 입력

내 단편에서 새 활동을 시작합니다.

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().

나는 그런 것을 가지고 있습니다.0x40001,0x20001임의의 상위 비트 세트가 있는 등.의사들은 이것에 대해 아무 말도 하지 않습니다.아이디어 있어요?

전화를 걸겠습니다.startActivityForResult()당신의Fragment당신이 이것을.requestCode에 의해 변경됩니다.Activity소유하고 있는Fragment.

정확한 정보를 얻고 싶다면,resultCode활동에서 다음을 시도합니다.

변경:

startActivityForResult(intent, 1);

받는 사람:

getActivity().startActivityForResult(intent, 1);

요청 코드가 잘못된 것이 아닙니다.v4 지원 라이브러리 조각을 사용하는 경우 조각 인덱스는 요청 코드의 상위 16비트로 인코딩되고 요청 코드는 하위 16비트로 인코딩됩니다.fragment 인덱스는 나중에 결과를 전달할 올바른 fragment를 찾는 데 사용됩니다.

따라서 Formfragment 개체에서 시작된 ActivityResult 요청 코드를 아래와 같이 처리합니다.

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

간편함:

Java:int unmaskedRequestCode = requestCode & 0x0000ffff

코틀린:val unmaskedRequestCode = requestCode and 0x0000ffff

하위 16비트를 확인하고, 상위 16비트가 영점 처리된 상태에서 논리적 AND를 수행하여 마스크를 해제합니다.

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
            }

언급URL : https://stackoverflow.com/questions/10564474/wrong-requestcode-in-onactivityresult

반응형