내비게이션 컨트롤러는 내비게이션에 있어서 핵심 개념임, 이는 내비게이션 그래프를 가지고 있으며 그래프 내의 목적지 사이에서 이동할 수 있도록 메소드를 제공함
내비게이션 컴포넌트를 사용한다면 NavController 클래스를 사용해 내비게이션 컨트롤러를 생성할 수 있음, NavController 는 사용자가 방문했던 목적지를 추적하고 사용자가 목적지간 이동을 할 수 있도록 하는 중앙 내비게이션 API임
노트: 생성하는 NavHost마다 각자의 NavController를 가지고 있습니다. NavController는 NavHost의 그래프에 접근할 수 있는 방법을 제공합니다.
rememberNavController() 를 호출해 NavController 를 생성할 수 있음val navController = rememberNavController()
NavController 는 컴포저블 계층구조에서 모든 컴포저블이 참조가 가능할 정도로 높게 생성되어야 함, 이렇게 하면 상태 호이스팅 의 원칙을 따르도록 화면의 밖의 컴포저블을 수정할 수 있는 믿을 수 있는 단일 출처로 NavController 를 사용할 수 있게 함NavController 를 전달받을 수 있음Kotlin
Java
NavHostFragment를 먼저 가져온 이후에 프래그먼트에서 NavController 를 전달받음val navHostFragment =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
주의:
FragmentContainerView를 사용해NavHostFragment를 생성하는 동안이나FragmnetTransaction을 사용해 액티비티에 직접NavHostFragment를 추가하는 동안 문제가 생길 수 있습니다. 그렇다면onCreate()에서Navigation.findNavController(Activity, @IdRes int)를 사용해NavController를 받아오는 데 실패할 수 있습니다. 그러므로 앞의 예제처럼NavHostFragment에서 직접NavController를 전달받아야 합니다.
원문: https://developer.android.com/guide/navigation/navcontroller