본문 바로가기
Android/Errors

Fragment에서 startActivityForResult 사용 시 문제점

by JuHy_ 2020. 4. 20.

문제점

Fragment에서 startActivityForResult()를 통해 requestCode 101로 새 액티비티로 이동한 뒤 복귀했더니

정상적으로 intent에 저장된 데이터는 받아왔으나 requestCode가 65673과 같이 이상한 숫자로 넘어옴.

 

또한 onActivityResult() 함수가 Fragment에 없음.

 

해결 방법

public void moveToReviewWrite(){
    Intent intent = new Intent(MainActivity.this, ReviewWriteActivity.class);
    startActivityForResult(intent, REQUESTCODE_REVIEW_WRITE);
}

먼저 MainActivity에 메소드를 만들어 fragment에서 호출 시 이동하도록 구현.

 

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == REQUESTCODE_REVIEW_WRITE){
        NavHostFragment frag = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
        if(frag.getChildFragmentManager().getFragments().get(0) instanceof MovieDetailFragment){
            MovieDetailFragment movieDetailFragment = (MovieDetailFragment) frag.getChildFragmentManager().getFragments().get(0);
            movieDetailFragment.getContentFromReviewWrite(data);
        }
    }
}

onActivityResult() 또한 MainActivity에서 구현하여 requestCode 확인 후 데이터만 fragment로 전송.

 

이렇게 구현하니 번거롭지만 정상적으로 requestCode가 들어오는 것을 확인함.

fragment가 Activity 위에 떠있더라도 requestCode는 달라지는 것으로 추정.