2017-08-31 53 views
1

我有一个拥有ArrayList<>类型成员变量的类。这两个类都实现了parcelable。我被困在如何完成有其他课程参考的课程。与自定义可见对象一起打包

以下是我有:

data class Tab (val name: String, val title: String, val color: String, val sections: ArrayList<Section>) : Parcelable { 

    constructor(parcel: Parcel) : this(
      parcel.readString(), 
      parcel.readString(), 
      parcel.readString(), 
      parcel.readTypedList<Section>(sections, Section.CREATOR)) 

    override fun writeToParcel(dest: Parcel?, flags: Int) { 
     dest?.writeString(name) 
     dest?.writeString(title) 
     dest?.writeString(color) 
     dest?.writeTypedList<Section>(sections) 
    } 

    override fun describeContents(): Int { 
     return 0 
    } 

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

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

注意这个类是如何有一个名为sections值是一个ArrayList<Section>。我需要将该变量写入一个parcelable,但它不起作用。

作为参考,这里是Section类。我认为这一个是确定的:

data class Section(val type: String, val text: String, val imageName: String) : Parcelable { 

    constructor(parcel: Parcel) : this(
      parcel.readString(), 
      parcel.readString(), 
      parcel.readString()) 

    override fun writeToParcel(dest: Parcel?, flags: Int) { 
     dest?.writeString(type) 
     dest?.writeString(text) 
     dest?.writeString(imageName) 
    } 

    override fun describeContents(): Int { 
     return 0 
    } 

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

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

这是失败的readTypedList和writeTypedList行。

感谢您的任何帮助。

回答

1

首先解决

@Suppress("UNCHECKED_CAST") 
constructor(parcel: Parcel): this(parcel.readString(), parcel.readString(), parcel.readString(), parcel.readArrayList(Tab::class.java.classLoader) as ArrayList<Section>) 

解决方法二

constructor(parcel: Parcel): this(parcel.readString(), parcel.readString(), parcel.readString(), ArrayList<Section>()){ 
    parcel.readTypedList(sections, Section.CREATOR) 
} 
+0

这是伟大的。谢谢! – Alex

相关问题