2016-07-13 1 views
0

Мое приложение не имеет XML. Все это сделано из Java-кода динамически. В приложении, когда в портретном режиме отображается только один экран - фрагмент, который изменяется внутри FrameLayout внутри одного действия. При вращении одно и то же действие получает еще один FrameLayout (справа) для отображения двух половин экрана.Сохранение стека при изменении конфигурации в динамическом приложении с одной активностью

Приложение имеет пользовательский поток фрагментов. Если пользователь поворачивается на пейзаж, в левой половине экрана отображается меню (ListFragment), а правая половина экрана пуста.

Если пользователь выбирает один элемент из ListFragment (на левой стороне), правый FrameLayout показывает другой ListFragment или FormFragment (это зависит от ответа JSON). Если другой список показывает в правильном FrameLayout, если пользователь выбирает один элемент из этого списка, теперь это ListFragment идет в левой FrameLayout, а справа FormFragment т.д.

Так что это «прекрасный танец» замены фрагменты внутри левого и правого FrameLayouts, которые затем помещаются в заднюю часть. Поэтому, если пользователь в какой-то момент поворачивает экран, мне нужен способ сохранить эту заднюю часть, поэтому пользователь может вернуться через стоп-кадр, когда он находится в ландшафте.

Кроме того, если пользователь находится в портретном режиме, мне также нужен способ сохранить эту заднюю часть, когда он поворачивается от пейзажа к портрету.

Проблема:

Как сохранить (сохранить) в backstack всех фрагментов, если пользователь поворачивает экран от портрета до пейзажа, и наоборот, так что он может вернуться, как это не было никаких изменений вообще.

Можно ли добиться этого в Android? Я пробовал с setRetainInstance(), но я также читал, что это не так, если вы хотите работать с backstack, а также я очень новичок во всем этом, поэтому, если кто-нибудь может помочь мне с этой проблемой.

Заранее благодарен!

ответ

1

Вы можете использовать метод addToBackStack() для добавления транзакции фрагмента в фоновый стек. Это означает, что транзакция будет запомнена после ее фиксации и изменит ее действие, когда позже выскочит из стека.

Фрагмент кода:

FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace({your_Fragment_view}); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 

Не забудьте сделать addToBackStack (нуль), поэтому ваше предыдущее состояние будет добавлено к backstack, позволяя вам вернуться с кнопкой назад.

Ссылка Ссылка - https://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String)

+0

Да, я использую, что при замене фрагментов во время выполнения. Мое приложение прекрасно работает, если оно находится в портретном или ландшафтном режиме, но только в том, что мне нужен способ сохранить целую заднюю часть во время изменения конфигурации. – ravenns

Смежные вопросы