c
onActivityResult - Fragment or Activity 본문
startActivityForResult() 로 호출한 결과를 어디에서 처리해야 할까? 개인적인 생각으로는 Fragment 에서 시작한 Activity 라면 Fragment 에서 처리하는 것이 맞다고 생각한다.
어쨋건 Fragment 가 생긴 뒤, Activity 에서 시작한 startActivityForResult 의 결과물에 대하여, 시스템에서 Fragment 에서 생성한 경우, 16bit - 2byte shift 해서 처리하고 있다.
즉, 안드로이드 시스템에서 Activity 와 Fragment 에서 시작한 Activity 를 구분하고 있다고 보면 된다. 그래서, 만약, Fragment 에서 생성한 ActivityResult 를 상위 Activity 에서 처리하고 싶다고 한다면, >>16 을 사용해야 한다.
FragmentA.java
-----------------------------------
....
requestCode=1;
startActivityForResult(intent, requestCode)
....
-----------------------------------
ActivityA.java
-----------------------------------
....
@Override
protected void onActivityResult ( int requestCode, int resultCode, Intent data) {
int fragmentRequestCode = requestCode >> 16 ;
// fragmentRequestCode=1 }
....
-----------------------------------
여기서 알수 있는 것은 Fragment 에서 생성한 requestCode 는 0xffff 보다 작아야 한다는 것이다. 그래야 본래의 값을 잃어버리지 않을 수 있다.