개발/트러블슈팅

[안드로이드] FragmentContainerView NullPointerException 해결

로키입니다 2023. 5. 27. 19:07

defaultNavHost 설정, navGraph 설정, NavHostFragment, NavController 모두 잘 작성된 코드인데도

종종 아래 오류와 같이 NavHostFragment NullPointerException이 발생하는 경우가 있습니다.

java.lang.RuntimeException: 
Unable to start activity ComponentInfo{com.sample.yolo/com.sample.presentation.view.MainActivity}: java.lang.NullPointerException:
null cannot be cast to non-null type androidx.navigation.fragment.NavHostFragment

 

아래 오류 코드를 보면 NavHostFragment를 발견하지 못해서 발생한 오류라고 나오는데,

클린 빌드, 캐시 삭제, 의존성 버전 수정등 어떠한 방법을 시도해도 해결되지 못했습니다.

 


✔️ 트러블슈팅

android:name="androidx.navigation.fragment.NavHostFragment"

레이아웃 파일의 FragmentContainerView에 위 속성을 추가해주면 해결할 수 있습니다.

 

일반적으로 JetPack Navigation을 위한 NavController를 초기화하는 부분의 코드를 작성할 때

supportFragmentManager에서 FragmentContainerView를 가져온 뒤 NavHostFragment로 변환한 뒤

NavHostFragment에서 findNavController 메서드를 이용하여 객체를 생성합니다.

 

따라서 FragmentContainerView에서 어떤 종류의 Fragment를 지정해주는 작업이 필요한데, 그 역할을 수행하는 속성이 바로 위의 "name" 속성입니다.

Jetpack Navigation 공식 문서에서도 기본적으로 name 속성을 포함하고 있는 것을 볼 수 있습니다.