Почему при перевороте экрана ArrayList очищается

У меня имеется ListView и мой кастомный адаптер и при смене ориентации экрана элементы моего списка пропадают. Я попробовал сделать в другой активности такую же операцию с обычным адаптером и получилось, что элементы оставались, но добавлялись новые, то есть java код снова как бы подгружался и добавлял в имеющийся массив элементы.

Я проверил код оригинального адптера и ничего отвечающего за это не нашел, но придумал свое решение это при смене ориентации выполнять заполнение снова. Основной вопрос, это как отслеживать состояние экрана ориентации экрана и есть ли другое решение?


Ответы (1 шт):

Автор решения: Sergei Buvaka

Я думаю вам стоит почитать про жизненный цикл активити, раз вы задаете такие вопросы.

Что происходит когда вы поворачиваете экран? Происходит смена конфигурации, а это значит, что активити пересоздается, а это означает, что все переменные которые были в ней инициализируются заново.

Если вам нужно сохранить состояние экрана - то вам надо обрабатывать это ручками. Тут несколько основных пунктов:

  • Элементы которые в вашей XML разметке имеют уникальный id автоматически сохранят состояние. Это все происходит под капотом. Но только если вы назначили им id.

  • Если же вам надо какие-то простые данные, то для этого есть методы onSaveInstanceState() и onRestoreInstanceState(). Первый сохраняет ваши данные в Bundle, второй позволяет вам извлечь их. Этот способ подходит для простых переменных (например сохранит флаг, id или текст какой-то) т.к. размер бандла ограничен.

  • Если же вам нужно хранить какие-то объемные данные, то вам нужно их сохранять где-то в другом месте. Например в базу данных или же любую другую сущность которая живет независимо от вашей активити, а после каждой смены конфигурации снова получать эти самые данные.

→ Ссылка