티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Wrong requestCode in onActivityResult

onActivityResult의 requestCode가 잘못되었습니다.

 문제 내용 

I'm starting a new Activity from my Fragment with

저는 제 플래그먼트에서 새로운 액티비티를 시작합니다.
startActivityForResult(intent, 1);

 

and want to handle the result in the Fragment's parent 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
    }
}

 

The problem is that I never got the requestCode I've just posted to startActivityForResult().

문제는 방금 startActivityForResult()에 게시한 requestCode를 받지 못했다는 것입니다.

 

I got something like 0x40001, 0x20001 etc. with a random higher bit set. The docs don't say anything about this. Any ideas?

임의의 더 높은 비트가 설정된 0x40001, 0x20001 등과 같은 것을 얻었습니다. 문서는 이것에 대해 아무 말도하지 않습니다. 아이디어가 있나요?

 

 

 

 높은 점수를 받은 Solution 

You are calling startActivityForResult() from your Fragment. When you do this, the requestCode is changed by the Activity that owns the Fragment.

당신은 플래그먼트에서 startActivityForResult()를 호출하고 있습니다. 이렇게 하면 requestCode가 플래그먼트를 소유한 액티비티에 의해 변경됩니다.

 

If you want to get the correct resultCode in your activity try this:

액티비티에서 올바른 resultCode를 얻으려면 다음을 수행하세요.

 

Change:

아래를..:
startActivityForResult(intent, 1);

 

To:

아래로..:
getActivity().startActivityForResult(intent, 1);

 

 

 가장 최근 달린 Solution 

Easier:

간편함:

 

Java: int unmaskedRequestCode = requestCode & 0x0000ffff

Java: int unmaskedRequestCode = requestCode & 0x0000ffff

 

Kotlin: val unmaskedRequestCode = requestCode and 0x0000ffff

코틀린: val unmaskedRequestCode = requestCode and 0x0000ffff

 

Check for the lower 16 bits, just unmask it doing a logical AND with the upper 16 bits zeroed

하위 16비트를 확인하고, 상위 16비트가 0인 상태에서 논리적 AND를 수행하여 마스크를 해제합니다.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    final int unmaskedRequestCode = requestCode & 0x0000ffff

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

    }
}

 

 

출처 : https://stackoverflow.com/questions/10564474/wrong-requestcode-in-onactivityresult

반응형
댓글
공지사항
최근에 올라온 글