Android 如何实现可变映射的parcelable to ArrayList?

Android 如何实现可变映射的parcelable to ArrayList?,android,kotlin,parcelable,Android,Kotlin,Parcelable,我的类中有一个属性,即数据类型是ArrayList,但我不知道在包构造函数和writeToParcel方法中应该写什么 class User() : Parcelable { var uid : String = "" var upcomingEvents : ArrayList<MutableMap<String,Any>> = ArrayList() constructor(parcel: Parcel) : this() { ui

我的类中有一个属性,即数据类型是
ArrayList
,但我不知道在包构造函数和
writeToParcel
方法中应该写什么

class User() : Parcelable {
     var uid : String = ""
     var upcomingEvents : ArrayList<MutableMap<String,Any>> = ArrayList()

  constructor(parcel: Parcel) : this() {
     uid = parcel.readString() ?: ""
     upcomingEvents = ....... // <-- what should I write in here ?

  }   

  override fun writeToParcel(parcel: Parcel, flags: Int) {
     parcel.writeString(uid)
     parcel........ // <--- and also here ???

  }
class User():可包裹{
变量uid:String=“”
var-upcomingEvents:ArrayList=ArrayList()
构造函数(地块:地块):this(){
uid=地块。readString()?:“”
upcomingEvents=…../如前所述,在Kotlin中,您可以使用注释自动生成所有代码:

import android.os.Parcel
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize

@Parcelize
data class User(var uid: String, var upcomingEvents: List<MutableMap<String, Any>>) :
    Parcelable
导入android.os.packet
导入android.os.Parcelable
导入kotlinx.android.Parcelize.Parcelize
@包裹
数据类用户(变量uid:String,变量upcomingEvents:List):
包裹的
如果您使用Any类,此方法将不起作用。在这种情况下,您可以将Any更改为Parcelize支持的类,或者自己编写代码。类似于以下内容:

data class User(var uid: String, var upcomingEvents: List<MutableMap<String, Any>>) :
    Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.readString() ?: "",
        readUpcomingEvents(parcel)
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(uid)
        parcel.writeList(upcomingEvents)
    }

    override fun describeContents(): Int {
        return 0
    }

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

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

        private fun readUpcomingEvents(parcel: Parcel): List<MutableMap<String, Any>> {
            val list = mutableListOf<MutableMap<String, Any>>()
            parcel.readList(list as List<*>, MutableMap::class.java.classLoader)

            return list
        }
    }
}
数据类用户(变量uid:String,变量upcomingEvents:List):
包裹的{
构造函数(地块:地块):此(
parcel.readString()?:“”,
readUpcomingEvents(包裹)
)
覆盖地块(地块:地块,标志:Int){
包裹写入(uid)
包裹写入列表(upcomingEvents)
}
覆盖有趣的描述内容():Int{
返回0
}
同伴对象创建者:Parcelable.CREATOR{
覆盖createFromParcel(地块:地块):用户{
退货用户(包裹)
}
覆盖新数组(大小:Int):数组{
返回阵列fnulls(大小)
}
私人娱乐readUpcomingEvents(包裹:包裹):列表{
val list=mutableListOf()
parcel.readList(列表为列表,可变映射::class.java.classLoader)
返回列表
}
}
}
您可以使用它生成所有代码,除非您有一个自定义的实现,您必须编写它