Как вы передаете обнуляемый список объектов с Parcelable

1

Я хочу передать пользовательский объект, который имеет обнуляемый список других пользовательских объектов. Как мне обойти это. Я использую Kotlin

writeTypedList и createTypedArrayList не работают, когда список пуст

Теги:
kotlin
parcelable

2 ответа

1
Лучший ответ

Довольно просто, вам просто нужно прочитать список, только если он не нулевой.

dest.writeByte(list == null ? (byte)0 : (byte)1)
if(list != null) {
    dest.writeInt(list.size());
    dest.writeTypedList(list);
}

затем

boolean hasList = in.readByte() > 0;
if(hasList) {
    int size = in.readInt();
    List<MyObj> list = new ArrayList<>(size);
    in.readTypedList(list, MyObj.CREATOR);
}
  • 0
    Я совсем не хочу спамить, но я бы не стал этого делать, потому что Android уже делает это за вас. Источник для Parcel.writeTypedList () показывает, что система уже может обрабатывать пустые значения (и делает это, записывая в посылку флаг int): android.googlesource.com/platform/frameworks/base/+/…
  • 0
    @BenP. Я доверяю исходному коду, но потом мне интересно, что не сработало для задающего вопрос.
0

Как отправить список пользовательских объектов, который в свою очередь состоит из пользовательских объектов?

Вам необходимо реализовать Parcelable interface для каждого настраиваемого объекта в созданной вами ссылке.

dest.writeTypedList(customList) // in write to parcel 

а также

this.customList = in.createTypedArrayList(CustomObject.CREATOR) // in the constructor which receives (Parcel in) as parameter

Только помните, не пропускайте ни один объект из реализуемого интерфейса интерфейса в ссылке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню