У меня возникли проблемы с получением некоторых пользовательских подклассов DialogPreference внутри PreferenceFragment, чтобы оставаться видимыми, когда экран повернут. Я не испытываю этой проблемы при использовании PreferenceActivity, поэтому я не знаю, является ли это ошибкой Android или проблемой с моим кодом, но я бы хотел, чтобы кто-то подтвердил, имеют ли они такой же опыт.
Чтобы проверить это, сначала создайте экран предпочтений, содержащий хотя бы один диалог DialogPreference (не имеет значения, какой подкласс). Затем отобразите его в PreferenceActivity. Когда вы запустите приложение, нажмите на DialogPreference так, чтобы он показывал диалог. Затем поверните экран так, чтобы ориентация изменилась. Диалог остается видимым?
Затем попробуйте то же самое, но с PreferenceFragment, чтобы отображать ваши предпочтения вместо PreferenceActivity. Опять же, диалог остается видимым при повороте экрана?
До сих пор я обнаружил, что диалог останется видимым, если вы используете PreferenceActivity, но не при использовании PreferenceFragment. Глядя на исходный код для DialogPreference, кажется, что правильное поведение для того, чтобы диалог оставался видимым, потому что isDialogShowing
- это информация о состоянии, которая сохраняется, когда onSaveInstanceState()
вызывается при переориентации экрана. Поэтому я считаю, что ошибка может препятствовать восстановлению этой информации о состоянии PreferenceFragment (и все внутри него).
Если это ошибка Android, это имеет далеко идущие последствия, поскольку любой, кто использует PreferenceFragment, не может сохранять и восстанавливать информацию о состоянии.
Кто-нибудь может подтвердить? Если это не ошибка, то что происходит?