如何为自定义对象的 ArrayList 添加 parcelable 实现?
Posted
技术标签:
【中文标题】如何为自定义对象的 ArrayList 添加 parcelable 实现?【英文标题】:How to add the parcelable implementation for ArrayList of Custom object? 【发布时间】:2021-12-02 02:02:55 【问题描述】:我创建了一个包含自定义对象的 ArrayList 和一些其他字符串变量的类。我使用“添加可打包的实现”来使此类可打包。
在自动生成的代码中,我尝试将 readTypedList 用于 TODO 部分,但随后出现如下所示的错误。我使用的自定义对象 Cart 也是 parcelable 的。
这是上图中提到的代码。
class Orders (
var id:String="",
var user_id:String="",
var products: ArrayList<Cart> =arrayListOf(),
var addressId:String="",
val image:String="",
val title:String="",
val subTotal:String="",
val shippingCharge:String="",
val total:String="",
) : Parcelable
constructor(parcel: Parcel) : this(
parcel.readString().toString(),
parcel.readString().toString(),
TODO("products"),
parcel.readString().toString(),
parcel.readString().toString(),
parcel.readString().toString(),
parcel.readString().toString(),
parcel.readString().toString(),
parcel.readString().toString()
)
override fun writeToParcel(parcel: Parcel, flags: Int)
parcel.writeString(id)
parcel.writeString(user_id)
parcel.writeString(addressId)
parcel.writeString(image)
parcel.writeString(title)
parcel.writeString(subTotal)
parcel.writeString(shippingCharge)
parcel.writeString(total)
override fun describeContents(): Int
return 0
companion object CREATOR : Parcelable.Creator<Orders>
override fun createFromParcel(parcel: Parcel): Orders
return Orders(parcel)
override fun newArray(size: Int): Array<Orders?>
return arrayOfNulls(size)
提前感谢您的帮助。
【问题讨论】:
product
值在创建 Orders
对象之前不存在。另外,请发布代码,而不是图片。
但是必须有其他方法可以让我的课程可打包。
【参考方案1】:
您不能使用products
列表,因为当您还没有调用主构造函数时它还不存在。相反,创建一个要读入的列表。由于readTypedList
不返回任何内容,您可以使用also
。
所以对于products
行使用:
arrayListOf().also parcel.readTypedList(it, Cart.CREATOR) ,
【讨论】:
“它”未被识别。它说的是未解决的参考。同样对于arrayListOf,它说“没有足够的信息来推断类型变量T” 然后添加类型arrayListOf<Cart>()
以上是关于如何为自定义对象的 ArrayList 添加 parcelable 实现?的主要内容,如果未能解决你的问题,请参考以下文章