앱 내의 화면 이동 구현을 도와주는 컴포넌트
Graph를 통해 시각적으로 view들이 어떻게 연결되어 있는지 알 수 있어 앱의 전반적인 흐름을 파악하기 쉽고, flow 수정이 용이하다.
따라서, Single Activity - Multiple Fragment 구조를 구현하기 쉽게 해준다.
NavController
: NavHost에서 App Navigation을 관리하는 객체이다. 사용자가 앱 내에서 이동할 때 NavHost에서 대상 콘텐츠의 전환을 조종하는 역할을 한다. 즉, Navigation Graph를 다루는 부분이다.NavGraph
: 모든 Navigation 관련 정보가 하나의 중심 위치에 모여 있는 XML 리소스이다. Destination 목록을 가지고 있다.NavHost
: NavGraph에서 대상을 표시하는 빈 컨테이너이다. (NavController를 갖고 있는 컨테이너) 대상 구성요소에는 프래그먼트 대상을 표시하는 기본 NavHost 구현인 NavHostFragment가 포함된다.⇒ NavGraph에서 특정 경로를 따라 이동할지, 특정 대상으로 직접 이동할지 NavController에게 전달하고, NavController가 NavHost에게 적절한 대상을 표시해주는 방식
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'
}
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>
NavGraph에 정의된 화면들을 보여주는 컨테이너의 역할을 한다.