Почему при перевороте экрана ArrayList очищается
У меня имеется ListView и мой кастомный адаптер и при смене ориентации экрана элементы моего списка пропадают. Я попробовал сделать в другой активности такую же операцию с обычным адаптером и получилось, что элементы оставались, но добавлялись новые, то есть java код снова как бы подгружался и добавлял в имеющийся массив элементы.
Я проверил код оригинального адптера и ничего отвечающего за это не нашел, но придумал свое решение это при смене ориентации выполнять заполнение снова. Основной вопрос, это как отслеживать состояние экрана ориентации экрана и есть ли другое решение?
Ответы (1 шт):
Я думаю вам стоит почитать про жизненный цикл активити, раз вы задаете такие вопросы.
Что происходит когда вы поворачиваете экран? Происходит смена конфигурации, а это значит, что активити пересоздается, а это означает, что все переменные которые были в ней инициализируются заново.
Если вам нужно сохранить состояние экрана - то вам надо обрабатывать это ручками. Тут несколько основных пунктов:
Элементы которые в вашей XML разметке имеют уникальный id автоматически сохранят состояние. Это все происходит под капотом. Но только если вы назначили им id.
Если же вам надо какие-то простые данные, то для этого есть методы
onSaveInstanceState()иonRestoreInstanceState(). Первый сохраняет ваши данные в Bundle, второй позволяет вам извлечь их. Этот способ подходит для простых переменных (например сохранит флаг, id или текст какой-то) т.к. размер бандла ограничен.Если же вам нужно хранить какие-то объемные данные, то вам нужно их сохранять где-то в другом месте. Например в базу данных или же любую другую сущность которая живет независимо от вашей активити, а после каждой смены конфигурации снова получать эти самые данные.