기존에는 프래그먼트간의 전환은 supportFragmentManager를 이용한 프래그먼트 트랜잭션으로 진행되었다. 하나의 액티비티에 여러가지 프래그먼트가 들어간 경우 이전 키를 누를 때 현재 프래그먼트가 어떤 것이냐에 따라 로직을 따로 구분했어야 했다. 그러던 중 안드로이드 JetPack 중 Navigation을 이용하면 프래그먼트 전환을 용이하게 한다 해서 적용해 보았다.

Navigation UI는 바텀 내비게이션바, 툴바, 옵션메뉴 등 여러가지 기존 뷰들을 지원한다. 이 중 바텀 내비게이션 바로 적용 해보겠다.

🤔 Navigation 구성요소

Navigation UI의 구성요소에는 Navigation Graph, NavHost, NavController가 있다.

Navigation Graph

Navigation 관련 정보가 들어있는 xml 파일이며 res 디렉토리 내의 navigation 폴더에 작성한다.

NavHost

Navigation Graph에서의 대상을 표시하는 컨테이너이다. 프래그먼트를 표시하는 NavHostFragment가 이에 해당한다.

NavController

NavHost에서의 Navigation을 관리하는 객체이다.

😀 사전 작업 with Safe-Args

Safe-Args란?

프래그먼트간 이동과 데이터 전달 시 타입 안전성을 보장하는 플러그인이다. 기존에 사용했던 프래그먼트 간 데이터 전달 방법에는 viewModel을 이용한 방법,

먼저 build.gradle(프로젝트)에 다음 dependency를 추가한다.

buildscript{
	dependencies{
	def nav_version = "2.5.1"
	       classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
	}
}

build.gradle(모듈)에 플러그인과 의존성을 추가한다.

plugins{
		...
    id 'androidx.navigation.safeargs.kotlin'
}
...
dependencies {
		...
    implementation 'androidx.navigation:navigation-fragment-ktx:2.5.1'
    implementation 'androidx.navigation:navigation-ui-ktx:2.5.1'
}