SafeArgs를 활용해 대상 간 데이터를 주고 받을 수 있다
기존 fragment간 데이터 전달에서는 bundle을 사용했다.
arguments = Bundle().apply {
putString("KEY", "value")
}
하지만 bundle의 사용에는 몇 가지 단점이 있다.
1. bundled은 key-value의 형태로 구성되기 때문에 발신 시 key 값을 잘못 입력하면 데이터를 전달받지 못한다.
2. 발신자가 전달한 값의 타입과 수신자가 원하는 타입의 형태가 맞지 않는 경우 에러가 발생한다.
3. default value를 지정할 수 없다.
buildscript {
repositories {
google()
}
dependencies {
val nav_version = "2.5.3"
classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
}
}
plugins {
id("androidx.navigation.safeargs")
}
이제 Safe Args를 사용할 준비가 다 되었다.
// BlankFragment.kt
binding.firstButton.setOnClickListener {
findNavController().navigate(BlankFragmentDirections.nextAction())
}
<fragment
android:id="@+id/blankFragment02"
android:name="com.example.navigationgraph.BlankFragment2"
android:label="fragment_blank2"
tools:layout="@layout/fragment_blank2">
<argument
android:name="blank_arg_number"
app:argType="string"
android:defaultValue="2"
/>
<action
android:id="@+id/before_action"
app:destination="@+id/blankFragment"/>
</fragment>
혹시나 build.gradle 파일을 groovy로 생성한 경우 다음 공식 문서를 참고하시면 좋을 것 같습니다.
https://developer.android.com/guide/navigation/use-graph/safe-args?hl=ko
참고 자료
https://developer.android.com/guide/navigation/use-graph/pass-data?hl=ko
https://www.kodeco.com/19327407-using-safe-args-with-the-android-navigation-component