我想通过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)
    }
}

推荐答案

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

parcel.writeIntArray(files.toIntArray())

Make sure you use the same data structure when reading back:

files = parcel.createIntArray().toList()

You could make it more efficient using extension functions by skipping the array representation:

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
}

Kotlin相关问答推荐

如果启用了Flyway迁移,则不能具有配置属性';datources.default.架构-生成

关键字';在When Kotlin When-语句中

Kotlin stlib中是否有用于将列表<;对<;A,B&>;转换为对<;列表<;A&>,列表<;B&>;的函数

列表在 android WebView 中没有正确迭代

Kotlin 接口类型参数

如何在 Jetpack Compose 中启动和停止动画

具有泛型类型的 Kotlin 密封接口不会为其子类型推断约束

如何在 Kotlin 中为变量分配另一个变量的值?

在 kotlin 中模拟伴随对象函数

如何在主线程上使用 Kotlin 协程 await()

在 Koin 中提供一个 Instance 作为其接口

哪里可以找到aapt2日志(log)?

Android 与 Kotlin - 如何使用 HttpUrlConnection

Android插件2.2.0-alpha1无法使用Kotlin编译

将字符串转换为HashMap的最简单方法

Kotlin flatMap - map

如何在kotlin用mockito模仿lambda

用 kotlin 学习 Android MVVM 架构组件

如何在 spring-boot Web 客户端中发送请求正文?

如何在 kotlin 中创建重复对象数组?