기술적용

Navigation safe args 구현

131 developer 2022. 5. 7. 13:45

https://developer.android.com/guide/navigation/navigation-pass-data?hl=ko#kts 

 

대상 간 데이터 전달  |  Android 개발자  |  Android Developers

대상 간 데이터 전달 탐색을 사용하면 대상 인수를 정의하여 탐색 작업에 데이터를 첨부할 수 있습니다. 예를 들어 사용자 프로필 대상은 사용자 ID 인수를 취해 표시할 사용자를 결정할 수 있습

developer.android.com

 

 

프로젝트 단위 build.gradle에 추가

plugins {
	...
    id 'androidx.navigation.safeargs' version '2.4.0' apply false
}

혹은

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

 

 

모듈 수준 build.gradle에 추가

plugins {
    id 'androidx.navigation.safeargs'
}

 

 

 

일반 자료형이 아닌 Data class를 사용할 경우 Parcelable 사용

플로그인 추가

plugins {
    id 'kotlin-parcelize'
}

 

@Parcelize 어노테이션을 사용하여 데이터 클래스 적용

@Parcelize
class CalendarDay (
    var isEmpty : Boolean,
    var year : String,
    var month : String,
    var day : String,
    var isRead : Boolean
) : Parcelable

 

 

Arguments 추가(Name첫번재 글자가 대문자일 경우 오류 발생)

 

 

데이터 전달

val item = CalendarDay("items")
val action = CalendarFragmentDirections.actionCalendarFragmentToAddReadingActivity(item)
findNavController().navigate(action)

 

 

 

데이터 받기

private val args by navArgs<AddReadingActivityArgs>()

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_add_reading)

		val year = args.calday.year
        val month = args.calday.month
        val day = args.calday.day

    }