AAC Jetpack Navigation

앱 내의 화면 이동 구현을 도와주는 컴포넌트

Graph를 통해 시각적으로 view들이 어떻게 연결되어 있는지 알 수 있어 앱의 전반적인 흐름을 파악하기 쉽고, flow 수정이 용이하다.

따라서, Single Activity - Multiple Fragment 구조를 구현하기 쉽게 해준다.

Navigation의 구성 요소

⇒ NavGraph에서 특정 경로를 따라 이동할지, 특정 대상으로 직접 이동할지 NavController에게 전달하고, NavController가 NavHost에게 적절한 대상을 표시해주는 방식

Untitled

Navigation 적용

의존성 추가

dependencies {
  
  // Kotlin
  implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
  implementation("androidx.navigation:navigation-ui-ktx:$nav_version")

}
// 최상위 build.gradle(project)

buildscript {
    ext {
        nav_version = '2.4.1'
    }
    repositories {
        google()
    }
    dependencies {
		    // Safe Args 추가는 Optional
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}
// app or module build.gradle

plugins {
    id 'androidx.navigation.safeargs.kotlin'
}

NavGraph 작성

res > New > Android Resource File > Resource Type > Navigation

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="<http://schemas.android.com/apk/res/android>"
    xmlns:app="<http://schemas.android.com/apk/res-auto>"
    xmlns:tools="<http://schemas.android.com/tools>"
    android:id="@+id/nav_graph"
    app:startDestination="@id/firstFragment">

    <fragment
        android:id="@+id/firstFragment"
        android:name="com.example.libraryproject.FirstFragment"
        android:label="fragment_first"
        tools:layout="@layout/fragment_first" >
        <action
            android:id="@+id/action_firstFragment_to_secondFragment"
            app:destination="@id/secondFragment" />
    </fragment>
    <fragment
        android:id="@+id/secondFragment"
        android:name="com.example.libraryproject.SecondFragment"
        android:label="fragment_second"
        tools:layout="@layout/fragment_second" >
        <action
            android:id="@+id/action_secondFragment_to_thirdFragment"
            app:destination="@id/thirdFragment" />
    </fragment>
    <fragment
        android:id="@+id/thirdFragment"
        android:name="com.example.libraryproject.ThirdFragment"
        android:label="fragment_third"
        tools:layout="@layout/fragment_third" />
</navigation>

NavHost 작성

NavGraph에 정의된 화면들을 보여주는 컨테이너의 역할을 한다.