ANDROID/Android Compose

[Android/Compose] Navigation 기억하기

주 녕 2024. 11. 13. 00:26
반응형

 

왜인지 모르겠지만 Navigation은 항상 헷갈리는 토픽 중 하나였다

이번 포스팅으로 Navigation의 구조이 대해서 좀 더 이해 + 기억할 수 있으면 좋겠다

 

 

Navigation의 주요 구성    

본인이 빠르게 기억하기 위해 만든 이미지이므로 정확하지는 않을 수 있다는 점

  • NavHost (현재 Destination을 가지고 있는 UI 요소)
  • NavGraph (모든 Destination을 가지고 있는 데이터 구조)
  • NavController (🕹️ : Destination 간의 이동을 관리하는 도구(조력자))
  • Destination (NavGraph의 노드)

 

Controller로 할 수 있는 Destination 간의 이동하는 방법을 이용하여

NavGraph의 Destination 중 현재 보여줄 Destination을 NavHost에 swap 해준다!

초코칩 쿠키를 닮았다

 

 

1.  NavController 만들기

val navController = rememberNavController()
  • 모든 Destination로 이동할 수 있도록 가장 높은 계층 구조에 Controller를 만들어야 한다
  • 개발해보면서 이 Controller는 여러개 만들어도 상관은 없었다
    • 하지만 내가 만든 각 Graph들의 최상위에 위치시켜야 한다는 개념을 잊지말자

 

2. NavGraph 만들기

2가지 방법이 있다.

  1. NavHost를 추가하면서 직접 Graph 구성하기
  2. NavController.createGraph()를 이용하여 NavGraph를 만들고 NavHost에 전달하기
val navController = rememberNavController()

// 방법 1.
NavHost(navController = navController, startDestination = Destination1) {
    composable<Destination1> { Destination1Screen( /* ... */ ) }
    composable<Destination2> { Destination2Screen( /* ... */ ) }
    // Add more destinations similarly.
}

// 방법 2.
val navGraph by remember(navController) {
  navController.createGraph(startDestination = Destination1)) {
    composable<Destination1> { Destination1Screen( /* ... */ ) }
    composable<Destination2> { Destination2Screen( /* ... */ ) }
  }
}
NavHost(navController, navGraph)
NavController : NavHost = 1 : 1 임을 기억하자!

composable<T> { ... }

  • 각 루트는 NavGraphBuilder.composable<T>()의 T로 제공됨
  • 이 T는 결과가 되는 NavGraph에 Destination로 추가됨
  • 람다로 composable에 해당 Destination에 대해 NavHost에 어떤 것을 표시할지(Screen 등) 전달함

 

rememberNavController()

  • 구성이 변경되어도 NavController는 본인의 상태를 기억해야 함
  • 이와 관련된 개념으로 NavController이 기억해야 할 BackStack이 있다! (추후 포스팅으로~)

 

 

*실제로 어떻게 화면을 이동하고, 화면간 데이터를 전달하는지는 다음 포스팅에...!✨


Reference >

반응형