티스토리 뷰
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
'개발 > 안드로이드' 카테고리의 다른 글
액티비티 외부에서 startActivity() 호출하기 (0) | 2022.12.31 |
---|---|
FragmentPagerAdapter와 FragmentStatePagerAdapter의 차이점 (0) | 2022.12.30 |
Parcelable 인터페이스에 boolean 읽고 쓰기 (0) | 2022.12.30 |
안드로이드에서 설치된 애플리케이션 목록을 가져와 실행할 애플리케이션 선택하기 (0) | 2022.12.29 |
LinearLayout에 테두리 그리기 (0) | 2022.12.28 |