안드로이드/Tip
Navigation Component data전달하기
Debbi
2020. 11. 10. 01:43
728x90
https://developer.android.com/guide/navigation/navigation-pass-data#supported_argument_types
위에 공식 문서에서 data를 전달 할 수 있는 타입을 확인하시고
<fragment
android:id="@+id/detailFragment"
android:name="com.example.app.detailFragment"
android:label="detailFragment" >
<argument
android:name="data"
app:argType="com.example.app.detailFragment.UserInfo[]"/>
</fragment>
이런식으로 data를 전달 받을 fragment에 argument 태그로 추가해줍니다.
사용자정의 타입도 전달 할 수 있고 Array타입으로도 넘길 수 있습니다.
@Parcelize
data class UserInfo(
val name: String,
val age: Int
): Parcelable
사용자정의 타입을 사용할 경우 Parcelable나 Serializable를 구현해야 합니다. 이전에는 Parcelable를 구현하려면 코드가길어지고 복잡했지만 @Parcelize 어노테이션이 코틀린에서 제공해주므로 간단하게 구현이 가능합니다!
그리고 만약 data가 List타입일때
@Suppress("UNCHECKED_CAST")
public actual inline fun <reified T> Collection<T>.toTypedArray(): Array<T> {
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
val thisCollection = this as java.util.Collection<T>
return thisCollection.toArray(arrayOfNulls<T>(0)) as Array<T>
}
Array로 바꿔주는 toTypedArray 확장 함수가 있습니다!
val args: ConfirmationFragmentArgs by navArgs()
마지막으로 fragment에서 argument를 가져오는 방법입니다. dependencies 추가도 잊지 말아주세요
dependencies {
def nav_version = "2.3.1"
// 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"
// Feature module Support
implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"
// Testing Navigation
androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"
// Jetpack Compose Integration
implementation "androidx.navigation:navigation-compose:1.0.0-alpha01"
}