Поэтому я решил использовать backstack Fragment в своем домашнем проекте «Single Activity, Multiple Fragments», и у меня возникают проблемы с самого начала.
Мой поток приложений выглядит так -> Activity запускается,затем делает это:
supportFragmentManager.beginTransaction()
.add(R.id.container, OnboardingFragment.newInstance())
.commit()
Этот первый фрагмент OnboardingFragment, затем пользователь переходит к SignInFragment, где у меня есть этот метод в моей деятельности:
fun replaceFragment(fragment: Fragment) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.addToBackStack(null)
.commit()
}
Я использую этот метод дляstart SignInFragment()
, и я продолжаю использовать этот метод для навигации по приложению впоследствии.
Однако, что я хотел бы сделать, это после того, как пользователь войдет в систему, я хотел бы полностью удалить всеэлементы обратного стека и фрагменты, и начните с чистого листа.
Проблема в том, что если делать popBackStack
до backStackEntryCount == 0
, OnboardingFragment
никогда не выталкивается из стека, потому что он не был добавленк этому в первую очередь.Добавление его в backstack в начале привело к ошибке, когда backstack очищается, но у вас будет пустое представление, если вы нажмете Back или Up.
Я попытался сделать remove(OnboardingFragment())
, но это не сработалолибо выполнение 1010 * поверх него также не работает, потому что его пользовательский интерфейс остается под новым пользовательским интерфейсом.даже скрыть () не сработало.Почему это так или иначе происходит?
TLDR;как удалить первый фрагмент, добавленный в контейнер, если он не находится в заднем стеке?