Подтвердить что ты не робот

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

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

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

Мой вопрос:

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

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

4b9b3361

Ответ 1

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

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

(и, в дальнейшем, прочитать их)?

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

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

Есть ли какой-нибудь отличный трюк, чтобы не переписывать класс A Parcel?

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

Ответ 2

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

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

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