Расслоение массива arraylist - PullRequest
       4

Расслоение массива arraylist

0 голосов
/ 05 августа 2011

Как я могу поместить массив arrayList в Bundle?

ArrayList < myObjects >[] mElements;

Ответы [ 4 ]

4 голосов
/ 05 августа 2011

Сделать YourObject реализовать интерфейс Parcelable, затем использовать bundle.putParcelableArraylist(theParcelableArraylist).

Редактировать: упс, неправильно прочитал вопрос. Почему вы хотите сохранить массив arraylist? Если это для сохранения в изменении ориентации, может быть, вы хотите использовать onRetainNonConfigurationInstance вместо этого?

Редактировать 2: Хорошо, здесь идет. Создайте новый класс Wrapper, который реализует Parcelable (обратите внимание, что myObjects также должен быть разборным). Метод writeToParcel будет выглядеть примерно так:

public void writeToParcel(Parcel dest, int flags) {
  dest.writeInt(mElements.length);
  for(ArrayList<MyObject> element : mElements) {
    dest.writeParcelableArray(element.toArray(new MyObject[0]), flags);
  }
}

И конструктор:

private Wrapper(Parcel in) {
  int length = in.readInt();
  //Declare list
  for (int i = 0; i < length; i++) {
    MyObject[] read = in.readParcelableArray(Wrapper.class.getClassLoader());
    //add to list
  }
}
1 голос
/ 05 августа 2011

Невозможно использовать bundle, так как bundle допускает только массив примитивов ...

Попробуйте использовать данные или статические переменные уровня или прикладного уровня (плохая практика).

0 голосов
/ 01 мая 2014

Я просто использую putSerializable(myarraylistofstuff), а затем возвращаюсь с использованием get(), вам просто нужно отключить предупреждение. Я подозреваю (исправьте меня, если ошибаюсь), вы можете передать любой объект, имитирующий его как Serializable, пока вы находитесь в том же процессе, он будет передавать ссылку на объект. Этот подход, очевидно, не работает при передаче данных в другое приложение.

РЕДАКТИРОВАТЬ: В настоящее время Android передает ссылку только между фрагментами, я пытался передать произвольный объект в Activity, он работал, но объект был другим, тот же тест с использованием аргументов Fragment показал то же самое Object вместо.

В любом случае он отлично десериализует и сериализует мой Object, если у вас много объектов, лучше использовать Parcel вместо

0 голосов
/ 05 августа 2011

Если ваши объекты поддерживают сериализацию, помеченную интерфейсом Serializable, то вы сможете использовать bundle.putSerializable.

ArrayList поддерживает Serializable, но я не уверен насчет простого array.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...