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 속성을 포함하고 있는 것을 볼 수 있습니다.
'개발 > 트러블슈팅' 카테고리의 다른 글
[안드로이드] 안드로이드 스튜디오 PluginException (0) | 2023.11.10 |
---|---|
[안드로이드] Jetpack compose dependency 설정 (0) | 2023.07.11 |
[안드로이드] is not abstract and does not implement abstract member public abstract fun getActionId() 오류 (0) | 2023.04.17 |
[안드로이드] Could not resolve com.android.tools.build:gradle:7.4.2 오류 (0) | 2023.04.13 |
[안드로이드] Circular dependency 오류 (0) | 2023.04.13 |