본문 바로가기
안드로이드/공부 및 정리

[Android]Compose 에서의 Navigation 기본 사용법

by 디선 2024. 8. 23.

과거 프로젝트 Compose 마이그레이션 중 Navigation 적용 정리

Kotlin DSL과 Version Catalog를 사용하여 Jetpack Compose Navigation을 어떻게 적용했는지 정리한다.


0. SetUp

Dependency 추가하기

version catalog 설정

[versions]
hilt_navigation_compose = "1.2.0"

[libraries]
hilt_navigation_compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hilt_navigation_compose" }

module gradle 파일

dependencies {
    implementation(libs.hilt.navigation.compose)
}

hilt-navigation-compose 라이브러리는 Hilt를 사용하려는 경우 유용하다.

Android 개발자 사이트 공식용 설정

dependencies {
    val nav_version = "2.7.7"

    implementation("androidx.navigation:navigation-compose:\$nav_version")
}

1. Destination을 위한 Route 정의

enum class ScreenRoute {
    Intro,
    ScreenA,
    ScreenB,
    ScreenC
}

각 스크린의 경로(route)를 정의하는 enum class를 설정한다.

2. NavController 만들기

val navController = rememberNavController()

NavControllerCompose 컴포저블 계층에서 높은 위치에 배치하여 참조할 수 있게 한다.

3. NavHost 만들기

NavHost(
    navController = navController,
    startDestination = ScreenRoute.Intro.name
) {
    composable(route = ScreenRoute.Intro.name) { /* 스크린 */ }
    composable(route = ScreenRoute.ScreenA.name) { /* 스크린 */ }
    composable(route = ScreenRoute.ScreenB.name) { /* 스크린 */ }
}
  • startDestinationNavHost를 통해 처음으로 보여줄 화면이다. 이는 기존 AAC NavigationstartDestination과 동일한 개념이다.
  • route는 각 composable의 경로명을 나타내며, 이는 AAC Navigationdestination과 유사하다.
  • arguments는 화면 간 전달될 데이터를 정의한다.

4. Navigation 사용하기

navController.navigate(ScreenRoute.ScreenA.name)

navController.navigate(route)를 사용하여 다른 화면으로 이동한다. 이전 화면은 자동으로 Back Stack에 저장된다.

반응형