Использование @Parcelize, но путем удаления элементов получения и настройки в kotlin

#android #kotlin #parcelable

#Android #kotlin #parcelable

Вопрос:

Я пытаюсь пренебречь средствами получения и настройки в kotlin, используя @Parcelize. Но здесь немного запутался.

 class College : Parcelable {
var studentFound = true
    set(value) {
        field = value
        studentFoundEvents.onNext(value)
    }
val studentFoundEvents = PublishSubject.create<Boolean>()

var sNumber: String? = null
var sLevel: String? = null

var course: Course? = null
    set(value) {
        field = value
        cName = null
        cId = null
        cProf = null  
    }
}
  

и у меня есть соответствующий конструктор (источник: Parcel) {}, переопределяющий функцию writeToParcel(dest: Parcel?, flags: Int) {} и переопределяющий функцию describeecontents(): Int = hashCode().

Я хочу преобразовать весь Parcelable в @Parcelize. Вот что я пробовал, но не получилось.

 @Parcelize
data class College(
    var studentFound = true,
    val studentFoundEvents = PublishSubject.create<Boolean>(), // does not work here
    var sNumber: String? = null,
    var sLevel: String? = null,
    var course: Course? = null
) : Parcelable
  

Здесь чего-то не хватает? Заранее спасибо.

Ответ №1:

Я провел пару часов исследований о @Parcelize, не знаю, лучший это подход или нет. Всегда настоятельно рекомендую кого-либо, если у вас есть какое-либо лучшее решение.

 @Parcelize
class College : Parcelable {
var studentFound = true
    set(value) {
        field = value
        studentFoundEvents.onNext(value)
    }
val studentFoundEvents = PublishSubject.create<Boolean>()

var sNumber: String? = null
var sLevel: String? = null

var course: Course? = null
    set(value) {
        field = value
        cName = null
        cId = null
        cProf = null  
    }
}
  

Добавление @Parcelize, но не перемещение свойств в конструктор и удаление тезисов

 constructor(source: Parcel) {}, 
override fun writeToParcel(dest: Parcel?, flags: Int) {} and 
override fun describeContents(): Int = hashCode().
  

Надеюсь, это кому-нибудь поможет, и лучшие подходы тоже приветствуются.

Комментарии:

1. это выдает предупреждение: свойство не будет сериализовано в ‘Parcel’. Добавьте аннотацию «@IgnoredOnParcel», чтобы удалить предупреждение. Таким образом, это не работает.