참고
- https://developer.android.com/guide/navigation/navigation-pass-data
- https://developer.android.com/jetpack/androidx/releases/navigation
- https://www.charlezz.com/?p=354
- https://blog.naver.com/yoonhok_524/221530058636
종속성 추가
- 프로젝트 레벨
buildscript {
repositories {
google()
}
dependencies {
def nav_version = "2.1.0"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
}
}
- 앱 레벨
apply plugin: "androidx.navigation.safeargs" or apply plugin: "androidx.navigation.safeargs.kotlin"
dependencies {
def nav_version = "2.1.0"
// Java language implementation
implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"
// Kotlin
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
}
Safe Arg
- 번들을 사용해도 되지만 안전하게 변수로 사용하는 방법
- 방법
- 액션을 만든다.
- 액션에 arg를 추가 한다.
- 도착지에 arg 를 추가한다.
-
네비게이션 샘플
-
시작 지 액션 실행 - 자신이 정의 프래그먼트 이름(Register1Fragment)으로 xxxxxDirections 클래스(Register1FragmentDirections)가 자동 생성 되며 해당 클래스에 액션이 정의 되어 있다.
kotlin val action = Register1FragmentDirections.actionNavRegister1ToNavRegister2(it.arg) Navigation.findNavController(v).navigate(action)
- 종착지 확인
- 자신이 정의한 이름에(Register2Fragment) xxxArgs 가 추가된 클래스가 자동 생성되되 미리 정의된 변수를 확인 할 수 있습니다.
val args :Register2FragmentArgs by navArgs() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { log.d(args.name) }
에러 발생 주의점
- cannot inline bytecode built with jvm target 1.8 into bytecode that is being built with jvm target 1.6. please specify proper ‘-jvm-target’ option
- File-settings안의 kotlin compiler 안의 target JVM version을 바꿔준다
- File-Invalidate Caches / Restart 후 Build - Clean Project
- 안되면
- build.gradle(module:app)안의 android{} 안에 kotlinOptions{jvmTarget = “1.8”} 을 넣는다