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)
返回列表
}
}
}
您可以使用它生成所有代码,除非您有一个自定义的实现,您必须编写它