Вложенный экран предпочтений закрывается при изменении ориентации экрана в Android

Я недавно столкнулся с проблемой.

Я работаю с вложенным экраном предпочтений следующим образом:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

<PreferenceScreen
    android:key="pref_name"
    android:title="@string/pref_title" >

</PreferenceScreen>

When my screen has the focus on the Nested Preference Screen and I change screenorientation, the Nested PreferenceScreen closes.

Я также пробовал включать:

android:configChanges="orientation|keyboardHidden"

в AndroidManifest.xml, но не сработало.

У кого-нибудь есть решение для этого?

ИЗМЕНИТЬ ВОЗМОЖНОЕ РЕШЕНИЕ:

Я нашел решение. Я думал, что это такая строчка:

android:configChanges="keyboardHidden|orientation|screenSize"

person Thijs Limmen    schedule 18.04.2013    source источник
comment
Пожалуйста, опубликуйте лог   -  person Nickolai Astashonok    schedule 18.04.2013
comment
В LogCat нет конкретного сообщения или ошибки. Может быть, это просто естественное поведение? Обычно Nested ScreenPreference закрывается, и снова появляется основной ScreenPreference. Очевидно, я хочу, чтобы фокус оставался на вложенном ScreenPreference.   -  person Thijs Limmen    schedule 18.04.2013
comment
У меня есть вложенные фрагменты в настройках моего приложения. Он отлично работает с изменениями местоположения ... Так что, если ваш фрагмент закрывается, вам нужно получить что-то в logcat ... В противном случае я не могу вам помочь   -  person Nickolai Astashonok    schedule 19.04.2013
comment
У меня такая же проблема. Вы когда-нибудь находили разрешение?   -  person Jay Soyer    schedule 20.08.2013
comment
@JaySoyer Посмотрите на решение, которое я предлагаю. Не уверен, что это исправило. Это исправлено в моем приложении.   -  person Thijs Limmen    schedule 22.08.2013
comment
Правильно ли вы сохраняете и восстанавливаете состояния своих экземпляров? Когда происходит поворот экрана, действие закрывается и создается заново. Вы должны запомнить состояние ваших вложенных предпочтений и воссоздать это состояние. Вы не получите никаких ошибок. Просто состояния не воссоздаются, и вы оказываетесь в том же состоянии, что и при первом создании активности.   -  person HpTerm    schedule 22.08.2013
comment
Возможно, стоит выложить код используемой активности и фрагмента.   -  person HpTerm    schedule 22.08.2013
comment
Когда вы используете android: configChanges, вы просите действие не уничтожать повторно созданное, поэтому оно работает. Я не уверен, но думаю, что это плохая практика. Правильный способ - правильно сохранять и восстанавливать состояния.   -  person HpTerm    schedule 22.08.2013


Ответы (1)


Понятно. Чтобы предотвратить закрытие вложенного экрана при повороте, необходимо убедиться, что родительскому экрану присвоено значение ключа. Вот и все. Например:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    android:key="useless_key">

    <PreferenceScreen
        android:key="pref_name"
        android:title="@string/pref_title" >
    </PreferenceScreen>
</PreferenceScreen>

Боковое примечание: хотя переопределение onConfigChanges решило проблему, вы почти никогда не должны этого делать. Это полностью меняет то, как обычно ведет себя Activity. Ротация - лишь одна из многих причин, по которым происходит изменение конфигурации. Если ваше Activity не может правильно обработать ротацию, оно также не сможет обработать эти другие условия. Прочтите этот содержательный пост, чтобы узнать больше.

person Jay Soyer    schedule 22.08.2013
comment
Спасибо, это исправило для меня. Это должен быть принятый ответ. - person Jacob Ras; 12.10.2014