如何在Kotlin中保留List <int>?

时间:2019-02-17 03:46:40

标签: android kotlin parcelable

我正在尝试对Int列表进行修饰。

我已经尝试过以下解决方案:How to parcel List<Int> with kotlin,但是没有用

data class Pizza(
   var ingredients: ArrayList<Int>,
   val name: String,
   val imageUrl: String
) : Parcelable {
constructor(parcel: Parcel) : this(
        TODO("ingredients"),
        parcel.readString(),
        parcel.readString()) {
}

override fun writeToParcel(parcel: Parcel, flags: Int) {
    parcel.writeString(name)
    parcel.writeString(imageUrl)
}

override fun describeContents(): Int {
    return 0
}

companion object CREATOR : Parcelable.Creator<Pizza> {
    override fun createFromParcel(parcel: Parcel): Pizza {
        return Pizza(parcel)
    }

    override fun newArray(size: Int): Array<Pizza?> {
        return arrayOfNulls(size)
    }
}

2 个答案:

答案 0 :(得分:0)

您为什么不尝试@Parcelize! Kotlin的另一个很酷的功能。

在gradle中启用kotlin实验

//Make sure you have adeed 
apply plugin: ‘kotlin-android-extensions’

androidExtensions {
    experimental = true
}

然后

@Parcelize
data class Pizza(
   var ingredients: ArrayList<Int>,
   val name: String,
   val imageUrl: String
) : Parcelable

就这样。

答案 1 :(得分:0)

有多种方法可以在包裹中写入/读取列表,这是一种简单的解决方案。

首先,使用writeList将清单写到包裹中

override fun writeToParcel(parcel: Parcel, flags: Int) {
    parcel.writeList(ingredients)
    parcel.writeString(name)
    parcel.writeString(imageUrl)
}

然后,使用readArrayList从包裹中读取列表。

constructor(parcel: Parcel) : this (
    parcel.readArrayList(Int::class.java.classLoader) as ArrayList<Int>,
    parcel.readString(),
    parcel.readString()
)

希望有帮助。