잘못된 요청 활동 결과 코드 입력
내 단편에서 새 활동을 시작합니다.
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
'programing' 카테고리의 다른 글
요소가 부모의 자식인지 확인 (0) | 2023.08.29 |
---|---|
intptr_t 및 uninttr_t의 문자열 형식 (0) | 2023.08.29 |
CSS 필터를 배경 이미지에 적용하는 방법 (0) | 2023.08.29 |
PowerShell 패키지 관리, 패키지 공급자를 제거하는 방법은 무엇입니까? (0) | 2023.08.29 |
VBA - 모델이 없는 UserForm 인스턴스를 제대로 제거합니다. (0) | 2023.08.24 |