Как выглядит поле CREATOR? - PullRequest
0 голосов
/ 03 июля 2018

Мой класс 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 голосов
/ 03 июля 2018

Как Жоао Алвес говорит:

Есть еще одна небольшая проблема с Parcelize. В данный момент проблема с Android Studio, показывающая ошибку неполная реализация интерфейса Parcelable:

image

Это известная ошибка в самой IDE, и ее можно игнорировать. ничего плохого в коде, и он работает как положено. Вы можете сохранить трек вопроса здесь. На данный момент это состояние В процессе.

Так что вы можете просто проигнорировать это предупреждение.

0 голосов
/ 03 июля 2018

@ 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
0 голосов
/ 03 июля 2018

Пример реализации пакета может выглядеть следующим образом:

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. Это будет реализовано для вас.

...