@pmozil

Как сохранить данные ArrayList в Adndroid при повороте экрана?

Имеется класс-шаблон OwnClass.
В MainActivity есть объект этого класса ArrayList.
Как сохранить view с помощью onSaveInstanceState?
protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putStringArrayList("list", (ArrayList<>) output1);
    }

protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        ListView lv = (ListView) findViewById(R.id.listView);
        output1 = savedInstanceState.getStringArrayList("list");
        lv.setAdapter((new ArrayAdapter<OwnClass>(MainActivity.this,
        android.R.layout.simple_list_item_1, output1)));
    }

Вылетает ошибка,что ожидается String а найден OwnClass.И это понятно,так как используется метод getStringArrayList.

Каким методом можно записать и возобновить ArrayList имея объекты собственного класса?
Заранее спасибо!
  • Вопрос задан
  • 1015 просмотров
Пригласить эксперта
Ответы на вопрос 2
Возможно, будет проще использовать статический список, инициализировав его один раз:

staic ArrayList<MyItem> alm = null;

@Override
public void onCreate(Bundle sis) {
...
if (alm == null) {
  alm = new ArrayList<>();
  // Заполняем список
}
// Создаём ArrayAdapter с параметром alm, отдаём его ListView-у и т.д.
...
}


А если несколько однотипных фрагментов/активитей, можно вообще использовать статический список списков:

static HashMap<String, ArrayList<MyItem>>
Ответ написан
Комментировать
SanchelliosProg
@SanchelliosProg
Java, Android, Software Testing
Вам надо, чтобы собственный класс реализовывал интерфейс Parcelable, в этом случае коллекцию будет легко сохранить в Bundle SavedInstanceState и выдёргивать их оттуда. Просто будете записывать объект как ParcelableArrayList
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы