기술적용
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
}