#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», чтобы удалить предупреждение. Таким образом, это не работает.