如何使用嵌套 classes 制作 parcelable class

How to make parcelable class with nested classes

我是 Android 开发人员的新手。我面临着这样一个事实,我需要将我的 class 重做成 Parcelable class。它的主要问题是我的 class 中嵌套了 3 个 classes。

这是我的代码:

class Test      (var id: Int,
                 var numberQuestion: String,
                 var question: String,
                 var questionImageSrc: String,
                 var examination: Boolean,
                 var typeQuestion: String,
                 var singleChoiceAnswers: ArrayList<singleChoiceAnswer>,
                 var multipleChoiceAnswers: ArrayList<multipleChoiceAnswers>,
                 var inputAnswer: ArrayList<inputAnswer>): Parcelable{

    constructor(source: Parcel): this(
        source.readInt(),
        source.readString(),
        source.readString(),
        source.readString(),
        source.readByte(),
        source.readString(),

        // ????

        )

    companion object{
        @JvmField
        val CREATOR = object: Parcelable.Creator<Test>{
            override fun newArray(size: Int) = arrayOfNulls<Test>(size)
            override fun createFromParcel(source: Parcel?): Test {
                return Test(source!!)
            }
        }
    }

    override fun writeToParcel(dest: Parcel?, flags: Int) {
        dest?.writeInt(id)
        dest?.writeString(numberQuestion)
        dest?.writeString(question)
        dest?.writeString(questionImageSrc)
        dest?.writeValue(examination)
        dest?.writeString(typeQuestion)
        dest?.
    }

    override fun describeContents(): Int {
        TODO("Not yet implemented")
    }

}

data class multipleChoiceAnswers(var letter: String,
                                 var text: String,
                                 var correctAnswer: Boolean,
                                 var checked: Boolean)

data class singleChoiceAnswer(var letter: String,
                              var text: String,
                              var correctAnswer: Boolean,
                              var checked: Boolean)

data class inputAnswer(var correctAnswer: String,
                        var userAnswer: String)

我也需要制作嵌套的 classes Parcelable 吗?我从 JSON 获取数据。如果你需要这里是link

提前谢谢你) P.S。对不起我的英语

不需要那么做。只需使用 @Parcelize from Kotlin。 用@Parcelize注释所有这些classes,并使它们扩展Parcelable。您可以在 Test class.

中删除所有与 Parcelable 相关的代码

另外,我会建议修改一些我在您的代码中看到的错误:

  • 将您的所有 var 属性变为 val。它将强制执行不变性,这是 Kotlin 的基本功能之一。您的 ArrayList 也是如此,请改用 List 来禁止修改列表。如果你真的不能有一个只读的 List 然后使用 MutableList。这是一个 read/write 列表比使用 ArrayList.
  • 更容易理解
  • 让你的 Test class 成为 data class。我不明白你为什么不从中受益。
  • 所有 classes 名称必须以大写字母开头。 multipleChoiceAnswers -> MultipleChoiceAnswers。这是我们在许多语言中都遵循的约定,而不仅仅是 Kotlin。