androidx navigation , Safe Arg

참고

종속성 추가

  • 프로젝트 레벨
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”} 을 넣는다

PyeongHo

즐겁게 또 즐겁게