Я столкнулся с некоторыми очень неожиданными (и невероятно разочаровывающими) функциями, пытаясь восстановить состояние списка CheckBox
после поворота экрана. Я решил, что сначала попытаюсь дать текстовое объяснение без кода, на случай, если кто-то сможет найти решение без всех кровавых подробностей. Если кому-то понадобится дополнительная информация, я могу выложить код.
У меня есть прокручиваемый список сложных View
s, которые содержат CheckBox
es. Мне не удалось восстановить состояние этих флажков после поворота экрана. Я реализовал onSaveInstanceState
и успешно перенес список выбранных флажков в метод onCreate
. Это выполняется путем передачи long[]
идентификаторов базы данных в Bundle
.
В onCreate()
Я проверяю Bundle
для массива идентификаторов. Если массив есть, я использую его, чтобы определить, какие флажки проверять при построении списка. Я создал несколько методов тестирования и подтвердил, что флажки устанавливаются правильно, на основе массива id. В качестве последней проверки я проверяю состояния всех флажков в самом конце onCreate(
). Все выглядит хорошо ... если я не поверну экран.
Когда я поворачиваю экран, происходит одно из двух: 1) Если выбрано любое количество флажков, кроме последнего, все флажки отключаются после поворота. 2) Если последний флажок установлен перед вращением, то все флажки отмечены после вращения.
Как я уже сказал, я проверяю состояние ящиков в самом конце моего onCreate()
. Дело в том, что состояние ящиков в конце onCreate
является правильным в зависимости от того, что я выбрал перед вращением. Однако состояние полей на экране не отражает это.
Кроме того, я внедрил setOnCheckChangedListener()
каждого флажка и подтвердил, что состояние моих флажков изменяется после моего onCreate
метода, возвращаемого.
Кто-нибудь имеет представление о том, что происходит? Почему состояние моих флажков изменится после возвращения моего метода onCreate
?
Заранее спасибо за помощь. Я пытался размазать это в течение пары дней. После того, как я обнаружил, что мои флажки, видимо, менялись где-то за пределами моего собственного кода, я решил, что пришло время спросить.