Как сохранить состояние с помощью навигационного ящика и фрагментов

У меня есть приложение с навигационным ящиком, одним действием и множеством фрагментов. Когда я меняю ориентацию устройства, моя основная деятельность воссоздается, и появляется мой основной фрагмент, а не текущий фрагмент. Так же, как когда я запускаю приложение.

Как я могу восстановить текущий фрагмент и, возможно, данные, связанные с выбранным фрагментом?

Я видел этот пост, но он не работает: Сохранить состояние фрагмента с помощью навигационного ящика

Заранее спасибо тем, кто сможет мне помочь.


person Tsuuki    schedule 13.03.2016    source источник
comment
вы пытались добавить изменения конфигурации в манифест   -  person Sarthak Mittal    schedule 14.03.2016
comment
Я подумал о чем-то, что можно считать взломом; всякий раз, когда вы вводите новый фрагмент, сохраняйте его позицию в SharedPreferences, а затем onConfigurationChange считывайте позицию из SharedPrefs и создайте экземпляр правильного фрагмента.   -  person Vucko    schedule 14.03.2016


Ответы (2)


Я обнаружил, что состояния фрагментов уже сохранены для вас.

Вот что я делаю: я проверяю, является ли savedInstanceState нулевым. Если это так, я выполняю транзакцию FragmentManager для отображения основного фрагмента. Если он не нулевой, это означает, что состояние фрагмента сохраняется. Я не делаю никаких транзакций, и фрагмент воссоздается для меня из сохраненного состояния.

person kris larson    schedule 14.03.2016
comment
Спасибо за вашу помощь, в моем onCreate я выполнил FragmentManager для отображения того или иного Фрагмента в соответствии с SharedPreferences. Поэтому я просто добавил условие для savedInstanceState == null. - person Tsuuki; 14.03.2016

if (savedInstanceState == null){
    //Launch HomeFragment onStart...
    Fragment fragment = new HomeFragment();
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.frame, fragment).commit();
}

Я добавил это в onCreate в моей основной деятельности

person Pascal Programming    schedule 10.07.2018