Fragment에서 startActivityForResult 하여 onActivityResult 결과 받기...

프로젝트 진행하다가 Fragment에서 startActivityForResult 로 호출하여 결과값을 받아야 할 경우가 있었는데

onActivityResult에서 requestCode 값이 엉뚱한 값으로 와서 당황했던적이 있다...

하여 구글링 해보니 아래와 같은 내용이 있었다.

 

Fragemnt 에서 startActivityForResult  를 할 경우 android 내부적으로 requestCode를 shit 하고 있었다.

public void startActivityFromFragment(Fragment fragment, Intent intent, int requestCode) {
    if (requestCode == -1) {
        super.startActivityForResult(intent, -1);
        return; 
    }
    
    if ((requestCode&0xffff0000) != 0) {
        throw new IllegalArgumentException("Can only use lower 16 bits for requestCode");     
    }       
    
    super.startActivityForResult(intent, ((fragment.mIndex+1)<<16) + (requestCode&0xffff));   
}

 

하여 Fragment에서 startActivityForResult  호출하여 onActivityResult 에서 값을 받아 처리해야 할 경우 아래와 같이 사용하면 된다.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    int request = requestCode & 0xffff;      
    // 프래그먼트에서 결과값을 받아야 한다면 아래와 같이...     
    Fragment fragment = getSupportFragmentManager().findFragmentByTag(태그명);
    fragment.onActivityResult(request, resultCode, data); 
}

댓글