Android: как вы можете предварительно заполнить стопку фрагментов?

У меня есть приложение, в котором есть одно действие, которое загружает фрагменты... при первом запуске оно загружает фрагмент А. Из А пользователь может перейти к фрагменту Б; и из B перейдите к фрагменту C. Каждый раз, когда фрагмент заменяется, я делаю addToBackStack. Кнопка «Назад» перемещается, как и следовало ожидать, от C к B и к A, и если вы снова нажмете назад, приложение закроется.

Я также использую хранилище данных Dropbox для хранения всех данных моего приложения, чтобы я мог беспрепятственно перемещаться между устройствами и синхронизировать все свои данные. Кажется, это работает хорошо. Как часть моих данных я сохраняю, какой фрагмент отображался последним. Теперь, когда мое приложение запускается на втором устройстве, оно правильно отображает последний открытый фрагмент. Это отлично работает, однако у меня больше нет заднего стека. Например, если приложение показывает фрагмент C на первом устройстве, а затем я запускаю приложение на втором устройстве, ожидаемый фрагмент C отображается на втором устройстве. Но когда я нажимаю кнопку «Назад», приложение закрывается вместо отображения фрагмента B. (Что имеет смысл, поскольку на втором устройстве приложение загружает только фрагмент C.)

Итак, мой вопрос: как мне предварительно заполнить мой baskstack, чтобы при нажатии кнопки «Назад» на втором устройстве он переходил к фрагменту B?


person Loren    schedule 22.01.2015    source источник


Ответы (2)


Ознакомьтесь с TaskStackBuilder или объявлением XML активности android:parentActivityName.

person dhaag23    schedule 23.01.2015

Я решил эту проблему, просто зафиксировав несколько транзакций фрагментов. Работает на меня

supportFragmentManager.beginTransaction().replace(R.id.content, Fragment1(), "f1").addToBackStack(null).commit()
supportFragmentManager.beginTransaction().replace(R.id.content, Fragment2(), "f2").addToBackStack(null).commit()
supportFragmentManager.beginTransaction().replace(R.id.content, Fragment3(), "f3").addToBackStack(null).commit()
supportFragmentManager.beginTransaction().replace(R.id.content, Fragment4(), "f4").commit()

Однако, чтобы найти более чистое и лучшее решение, вы также можете взглянуть на интерфейс навигации Jetpack

person Tobias    schedule 24.07.2018