서버에서 받아 온 데이터를 다른 액티비티에 전달하고자 했습니다. 이 과정에서 intent에 data class를 담아 전달하기 위해 방법을 찾던 중 Parcelize에 대해 알게 되었고 이를 사용하여 구현해보았습니다.
//build.gradle
plugins {
id "kotlin-parcelize"
}
우선 gradle에 plugin을 추가해줍니다.
//TestResponse.kt
@Parcelize
data class GetTestResponse(
@SerializedName("status") val status : String,
@SerializedName("body") val body : List<Test>?
) : Parcelable
@Parcelize
data class Test(
@SerializedName("quizIdx") val quizIdx : Int,
@SerializedName("category") val category : String,
@SerializedName("question") val question : String,
@SerializedName("answer") val answer : Boolean,
@SerializedName("solution") val solution : String
) : Parcelable
서버에서 넘겨준 데이터를 받기 위해 data class를 만들어줍니다. 이 때, data class 앞에 @Parcelize 어노테이션을 추가해줍니다. 여기서 저는 Test의 List를 intent에 담아 넘겨주려고 하여 Test와 GetTestResponse 둘 다 @Parcelize 어노테이션을 추가해줬습니다.
//TestActivity.kt
val intent = Intent(this, QuestionActivity::class.java)
intent.putExtra("Test", testList)
startActivity(intent)
TestActivity에서 QuestionActivity로 넘어갈 때, testList를 전달해주기 위해 putExtra를 사용해줍니다. 여기서는 다른 자료형을 전달할 때와 똑같습니다. 이 때 "Test"는 키값이고 testList가 전달 될 value입니다.
//QuestionActivity.kt
val intent = intent
var testList = intent?.getParcelableArrayListExtra<Test>("Test")
intent로 넘겨준 데이터를 불러올 때는 위와 같이 작성해줍니다. 저의 경우에는 Test의 arrayList를 전달 받는 것이어서 getParcelableArrayListExtra를 사용했는데 여러 개가 아니라면 getParcelableExtra를 사용하면 될 것 같습니다. 이를 활용하여 다음과 같은 화면을 만들 수 있었습니다.
참고
'Kotlin_study' 카테고리의 다른 글
[Kotlin] CosmoCalendar library 사용하기 (0) | 2022.06.29 |
---|---|
[Kotlin] Bottom Navigation Icon Click Event 처리 (0) | 2022.03.02 |
[Kotlin] ViewPager2 사용해서 배너 만들기 (0) | 2022.02.25 |
[Kotlin] 정규 표현식 사용하여 회원가입 화면 만들기 (0) | 2022.02.24 |
[Kotlin] Retrofit2 Multipart 이미지와 데이터 보내기 (0) | 2022.02.20 |