CREATOR字段是什么样的?

时间:2018-07-03 07:23:12

标签: android kotlin parcelable

我的Parcelable类希望我包含一个CREATOR字段,但我不知道这样的字段是什么样的。在此期间,我已经用SupressLint消除了投诉,但希望拥有CREATOR字段。知道是什么样吗?

@SuppressLint("ParcelCreator")
@Parcelize
class RecipeTemplate: Parcelable {
    var recipeHeader: String? = null
    var recipeText: String? = null
    var recipeImage: String? = null
    var recipeKey: String? = null
}

3 个答案:

答案 0 :(得分:2)

Joao Alves说:

  

尽管如此,Parcelize仍然存在一个小问题。在这一刻   Android Studio出现问题,显示有关   Parcelable接口的实现不完整:

     

image

     

这是IDE本身的一个已知错误,您可以忽略它,   代码没有错,它可以按预期工作。你可以保持   在这里跟踪问题。目前处于“进行中”状态。

因此您可以忽略此警告。

答案 1 :(得分:0)

可打包的示例实现如下所示:

data class WarriorParcelable(val name : String,
                             val weapon : String) : Parcelable {

    companion object CREATOR : Parcelable.Creator<WarriorParcelable> {
        override fun createFromParcel(parcel: Parcel): WarriorParcelable = WarriorParcelable(parcel)

        override fun newArray(size: Int): Array<WarriorParcelable?>  = arrayOfNulls(size)
    }

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

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

    override fun describeContents(): Int = 0
}

但是,如果使用@Parcelize,则无需编写Parcelable的实现代码。它将为您实现。

答案 2 :(得分:0)

@Parcelize 仍是一项实验性功能,升级到最新的kotlin插件版本并将此代码添加到您的 build.grade 中> 文件

android {
    ...

    androidExtensions {
        experimental = true
    }
}

IDE将停止抱怨。如下所示;我对您的课程进行了一些修改,但本质上是同一件事。

@Parcelize
data class RecipeTemplate(var recipeHeader: String? = null,
                      var recipeText: String? = null,
                      var recipeImage: String? = null,
                      var recipeKey: String? = null) : Parcelable