2017-08-31 75 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

相關問題