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가지 방법이 있다.
- NavHost를 추가하면서 직접 Graph 구성하기
- 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 >
반응형