PreferenceScreen в закрытии PreferenceFragment при изменении ScreenOrientation - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть несколько вложенных PreferenceScreen в моих PreferenceActivity, а под ними серия CheckBoxPreference.

Все работает хорошо, но всякий раз, когда устройство поворачивается, PreferenceActivity возвращается к основномуPreferenceScreen, независимо от того, на каком вложенном экране предпочтений находился пользователь.

Это точно так же, как и в предыдущих вопросах SO, где решением было добавить ключ на экран PreferenceScreen:

  1. Когда моя PreferenceActivity вращается, он не запоминает, какой PreferenceScreen был открыт

  2. Как предотвратить выход из экрана внутренних настроек при наличии конфигурацииизменить

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

Я добавил ключи ко всеммой PreferenceScreen и решение работает, пока я использую устаревший способ:

public class Settings extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
    }
}

Проблема в том, что я использую PreferenceFragment, как в этот SO ответ (итакже здесь ).

Код:

public class Settings extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    getFragmentManager().
            beginTransaction().
            replace(android.R.id.content, new MyPreferenceFragment()).
            commit();
}

    public static class MyPreferenceFragment extends PreferenceFragment
    {
        @Override
        public void onCreate(final Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.prefs);
        }
    }
}

Итак, как сохранить внутренний PreferenceScreen открытым после изменения ориентации экрана, если это возможно с текущим кодом?

Я вижу это для Preferences Google теперь рекомендует AppCompatActivity и PreferenceFragmentCompat, но я бы предпочел не использовать никаких библиотек, даже Google, специально для такой небольшой детали.

1 Ответ

0 голосов
/ 22 ноября 2018

Я весьма удивлен, что этой маленькой проблеме удалось создать три SO вопроса, пока Android был под API 11, и ни одного - который я могу найти, по крайней мере - между API 11 и API 28, когда PreferenceFragment устарел.

В любом случае, я нашел решение и здесь, в SO, в ответе на Предупреждение об устаревшем методе Android относительно PreferenceActivity .

Ключ должен проверить if (savedInstanceState == null) перед добавлениемPreferenceFragment, например:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    if (savedInstanceState == null)
        getFragmentManager().
                beginTransaction().
                replace(android.R.id.content, new MyPreferenceFragment()).
                commit();
}

Теперь вложенный PreferenceScreen остается открытым при изменении ориентации экрана, если, конечно, в нем установлено значение android:key.

...