Расширение Parcelable для чтения другого Parcelable

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

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

Одной из переменных-членов A является ArrayList объектов класса B.

Я пытаюсь написать переопределение Parcelable, но не могу понять, как сохранить и прочитать ArrayList класса B.

Существуют методы для чтения и записи ArrayLists, но им нужен параметр, который является ClassLoader, а я с ним не знаком. Я также мог бы скопировать ArrayList в массив и использовать методы для чтения и записи массива Parcelable, но для этого также требуется параметр ClassLoader.

Обновлять:

Это выглядит как

in.readTypedList(mList, ClassB.CREATOR);

и

out.writeTypedList(mList);

то, что я ищу?


person Andrew    schedule 25.08.2011    source источник


Ответы (1)


Вы можете передать null как ClassLoader, чтобы использовать значение по умолчанию.

Parcel.readTypedList() и Parcel.writeTypedList() вроде в порядке. Или вы можете использовать Parcel.readParcelableArray() и Parcel.writeParcelableArray() и преобразовать список в массив.

person Michael    schedule 25.08.2011
comment
Хорошо... но что делать, чтобы прочитать из Parcel в окончательный список? Я получаю, возможно, не был инициализирован. Будет ли readTypedList использовать существующий или настаивать на создании его заново? - person kaay; 11.02.2013
comment
Если список окончательный, это не значит, что он постоянный, поэтому вы можете просто передать список методу readTypedList(), и он будет заполнен ранее написанными объектами. Но перед вызовом метода нужно инициализировать список, например, final List<Foo> list = new ArrayList<Foo>();. - person Michael; 12.02.2013
comment
readTypedList() не создает для вас List. Вы должны сделать это самостоятельно перед вызовом метода. - person Michael; 12.02.2013