如何用kotlin标记List
我想要通过Bundle传递一个数据类(包含int作为一个属性列表)到其他活动,因此我需要添加Parcelable实现到我的数据类。 任何想法如何包裹这个属性?
data class Test(val id: Long, val files: List?) : Parcelable { constructor(parcel: Parcel) : this( parcel.readLong(), TODO("files")) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeLong(id) } override fun describeContents(): Int { return 0 } companion object CREATOR : Parcelable.Creator { override fun createFromParcel(parcel: Parcel): Test { return Test(parcel) } override fun newArray(size: Int): Array { return arrayOfNulls(size) } }
你可以写一个整数列表为int[]
:
parcel.writeIntArray(files.toIntArray())
确保在回读时使用相同的数据结构:
files = parcel.createIntArray().toList()
您可以通过跳过数组表示使用扩展函数更高效:
parcel.writeIntList(files) files = parcel.createIntList() fun Parcel.writeIntList(input:List) { writeInt(input.size) // Save number of elements. input.forEach(this::writeInt) // Save each element. } fun Parcel.createIntList() : List { val size = readInt() val output = ArrayList (size) for (i in 0 until size) { output.add(readInt()) } return output }