내비게이션 컨트롤러 생성

kosdjs·2025년 11월 19일

Android

목록 보기
28/29
  • 내비게이션 컨트롤러는 내비게이션에 있어서 핵심 개념임, 이는 내비게이션 그래프를 가지고 있으며 그래프 내의 목적지 사이에서 이동할 수 있도록 메소드를 제공함

  • 내비게이션 컴포넌트를 사용한다면 NavController 클래스를 사용해 내비게이션 컨트롤러를 생성할 수 있음, NavController 는 사용자가 방문했던 목적지를 추적하고 사용자가 목적지간 이동을 할 수 있도록 하는 중앙 내비게이션 API임

노트: 생성하는 NavHost마다 각자의 NavController를 가지고 있습니다. NavController는 NavHost의 그래프에 접근할 수 있는 방법을 제공합니다.

Compose

val navController = rememberNavController()
  • NavController 는 컴포저블 계층구조에서 모든 컴포저블이 참조가 가능할 정도로 높게 생성되어야 함, 이렇게 하면 상태 호이스팅 의 원칙을 따르도록 화면의 밖의 컴포저블을 수정할 수 있는 믿을 수 있는 단일 출처로 NavController 를 사용할 수 있게 함

View

  • 뷰 UI 프레임워크를 사용한다면 컨텍스트에 따라 다음과 같은 메소드 중 하나를 선택해 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

0개의 댓글