почему мой onCreate всегда запускается, когда я возвращаюсь к фрагменту с помощью компонента Android Navigation?

Я новичок в разработке Android, особенно с использованием компонента навигации. Я перехожу из одного пункта назначения (фрагмент A) в другой пункт назначения (фрагмент B), используя такой код

val BDestination = AFragmentDirections.actionToB(userData)
findNavController().navigate(BDestination)

и когда я возвращаюсь от фрагмента B к фрагменту A, всегда запускается метод onCreateView во фрагменте A. Я ожидаю, что если я вернусь из B в A, тогда он не будет запускать метод onCreateView, а будет запускать только метод onResume во фрагментеA

это нормальное поведение? я могу это изменить? потому что все свойства в моем фрагменте A исчезнут, если будет вызван метод onCreateView.


comment
Просто подтвердите, что запускается onCreate (), а не onCreateView?   -  person James Palfrey    schedule 06.08.2020
comment
@JamesPalfrey, у меня плохо, я имею в виду onCreateView   -  person sarah    schedule 06.08.2020
comment
Ответ ниже :)   -  person James Palfrey    schedule 06.08.2020
comment
Примечание. Фрагменты автоматически сохраняют и восстанавливают ваши данные (так же, как при изменении конфигурации или процессе смерти и воссоздания), поэтому любое состояние, которое вы теряете, происходит из-за вашего кода. Я бы посоветовал задавать отдельные вопросы для каждой части состояния, в которой у вас возникают проблемы с сохранением и восстановлением.   -  person ianhanniballake    schedule 06.08.2020


Ответы (1)


Если вы посмотрите на жизненный цикл ниже, вы увидите, что как только вы отойдете от активности, представление будет уничтожено с помощью метода onDestroyView(), однако, когда вы вернетесь к нему, оно запустит метод onCreateView(). Это нормальное поведение для жизненного цикла фрагмента. Если у вас есть код, который вы не хотите запускать каждый раз, когда представление выводится на первый план, я бы посоветовал вам поместить их в логический блок if ().

введите описание изображения здесь

person James Palfrey    schedule 05.08.2020