如何为自定义对象的 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&lt;Cart&gt;()

以上是关于如何为自定义对象的 ArrayList 添加 parcelable 实现?的主要内容,如果未能解决你的问题,请参考以下文章

如何为arraylist添加数字

如何为 UITableView 添加自定义 EditingAccessoryView?

如何为分析添加 Firebase 自定义事件?

如何为复杂对象编写自定义 JSON 解码器?

如何为自定义 B2B 应用添加 Apple ID?

如何为自定义 nemo 操作添加键盘快捷键?