Intereting Posts

Расширение класса, реализующего Parcelable

У меня есть класс, мы будем называть его классом A, который реализует Parcelable.

У меня есть второй класс, мы будем называть его классом B, который расширяет класс A.

Мой вопрос:

Как написать переменные-члены класса B на парцеллу, а затем записать в членский элемент родительские классы (то есть: класс A), а затем их прочитать?

Есть ли какой-то изящный трюк, которому не нужно переписывать код Parcel класса A? Или мне просто нужно переписать код Parcel в классе A и добавить дополнительный код для переменных члена класса B?

Solutions Collecting From Web of "Расширение класса, реализующего Parcelable"

Как написать переменные-члены класса B в парцеллу, а затем записать ее членские переменные родительского класса (то есть: класс A) на парцеллу

Класс B переопределяет writeToParcel() из класса A, привязывается к суперклассу, а также добавляет свои собственные объекты в Parcel .

(И, впоследствии, прочитать их)?

Класс B реализует public static final Parcelable.Creator<MyParcelable> CREATOR таким образом, что он может позволить обоим классам читать свои материалы. Если вы примете подход создания конструктора класса B, который берет Parcel как параметр конструктора, просто Цепочку к конструктору суперкласса (чтобы класс А выполнял свою работу), затем читайте данные класса B.

Ключ будет состоять в том, чтобы сделать их как в одном порядке. Если вы хотите, чтобы Class A сначала прочитал свои данные, Class A должен сначала записать свои данные.

Есть ли какой-то изящный трюк, которому не нужно переписывать код Parcel класса A?

Наследование и привязка к суперклассу.

Это немного сложно, но фокус в том, чтобы использовать Reflection для получения типов элементов подкласса и сортировки элементов, чтобы вы могли читать и записывать данные в том же порядке, используя соответствующие типы.

Я внедрил решение для класса А здесь: https://github.com/awadalaa/Android-Global-Parcelable

Поэтому теперь вы можете сделать любой класс применимым, просто расширив этот класс.