Я столкнулся с каким-то любопытным поведением в моем приложении при управлении Фрагментами, и мне было интересно, сможет ли SO помочь пролить свет на то, почему это происходит.
У меня есть два фрагмента, мы будем называть их фрагментом A и фрагментом B. Общий поток моего приложения заключается в том, что когда пользователь каким-то образом взаимодействует с фрагментом A, фрагмент B отображается, вызывая fragmentTransaction.replace()
(это происходит в любом случае). Когда я показываю фрагмент B, я добавляю фрагмент A в задний стек; затем, когда пользователь нажимает кнопку "Назад" на фрагменте B, фрагмент A снова отображается, выбирая из заднего стека.
Это все хорошо и хорошо, но сегодня я обнаружил, что есть поток из фрагмента B, который вызывает fragmentTransaction.replace()
, заменяя фрагмент B тем же экземпляром фрагмента A, который в настоящее время находится в фоновом стеке.
В самом деле, в этом нет ничего плохого, однако странное поведение возникает, когда я возвращаюсь из фрагмента А в фрагмент B. Если я назвал fragmentTransaction.replace()
, метод onCreate()
фрагмента B не вызывается.
Однако, если я вытащил фрагмент A из заднего стека, а затем заменил его на фрагмент B, будет запущен метод onCreate()
фрагмента B. Почему это?
Обратите внимание, что все экземпляры фрагмента A и фрагмента B создаются во время запуска его активности на хосте.
Изменить для уточнения. Случай, когда onCreate()
вызывается во второй раз, заключается в следующем: Прикрепить фрагмент A = > заменить фрагментом B, добавив фрагмент A в задний стек = > поп-фрагмент A, используя popBackStack()
= > снова заменить фрагмент A фрагментом B.