首页 文章

如何用kotlin包裹List <Int>

提问于
浏览
1

我想通过Bundle将数据类(包含int列表作为属性)传递给其他活动,因此我需要将Parcelable实现添加到我的数据类中 . 关于如何包裹这个房产的任何想法?

data class Test(val id: Long, val files: List<Int>?) : 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<Test> {
    override fun createFromParcel(parcel: Parcel): Test {
        return Test(parcel)
    }

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

1 回答

  • 6

    您可以将整数列表写为 int[]

    parcel.writeIntArray(files.toIntArray())
    

    确保在回读时使用相同的数据结构:

    files = parcel.createIntArray().toList()
    

    您可以通过跳过数组表示来使用扩展函数来提高效率:

    parcel.writeIntList(files)
    files = parcel.createIntList()
    
    fun Parcel.writeIntList(input:List<Int>) {
        writeInt(input.size) // Save number of elements.
        input.forEach(this::writeInt) // Save each element.
    }
    
    fun Parcel.createIntList() : List<Int> {
        val size = readInt()
        val output = ArrayList<Int>(size)
        for (i in 0 until size) {
            output.add(readInt())
        }
        return output
    }
    

相关问题