在Parcelable

时间:2018-03-01 08:42:50

标签: android kotlin

我为我的类添加了Parcelable实现并获取此代码:

data class Category (val name:String, var factors:ArrayList<String>):Parcelable {
    constructor(parcel: Parcel) : this(
            parcel.readString(),
            TODO("factors")) {
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(name)
    }

    override fun describeContents(): Int {
        return 0
    }

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

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

据我所知,我应该编写从ArrayList读取数据的方法。我试过用

parcel.readArrayList()

但无法理解,如何将String作为ClassLoader插入。请帮我理解,如何使这个对象Parcelable。

2 个答案:

答案 0 :(得分:0)

在构造函数中使用以下内容:

parcel.createStringArrayList()

并在writeToParcel内:

parcel.writeStringList(this.mTest)

只是一个侧节点:如果您正在使用Android Studio,只需让它使用Parcelable代码生成器插件生成Parcelable。

答案 1 :(得分:0)

阅读Parcelable

    segments=new ArrayList<>();
    in.readTypedList(segments,Segments.CREATOR);
    Multi = in.readString();

写作

 dest.writeTypedList(segments);
 dest.writeString(Multi);

它就像一个魅力