Расширение класса, реализующего Parcelable
У меня есть класс, мы будем называть его классом A, который реализует Parcelable.
У меня есть второй класс, мы будем называть его классом B, который расширяет класс A.
Мой вопрос:
Как мне написать переменные-члены класса B на Parcel, а затем записать его родительские классы (то есть: класс A) в Parcel (и, впоследствии, прочитать их)?
Есть ли какой-нибудь отличный трюк, чтобы не переписывать код класса А? Или мне просто нужно переписать код Parcel в классе A и добавить дополнительный код для переменных класса B?
Ответы
Ответ 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
поэтому теперь вы можете сделать любой класс возможным, просто расширив этот класс.