Когда я перехожу от одного фрагмента к другому с помощью новых компонентов навигации, я могу сделать это успешно со следующим:
btn_walk.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.next_action))
Теперь, если я вытащу стопку из целевого фрагмента с помощью
findNavController().popBackStack()
Фрагмент, запустивший этот фрагмент, снова воссоздает себя, но состояние не сохраняется, я искал, как это исправить, но я действительно не знаю, как на самом деле сделать функцию .add
с помощью navigate()
из навигации компоненты
Этот gif показывает навигацию от одного фрагмента к другому, при извлечении стека из целевого фрагмента он воссоздает фрагмент, который запустил этот фрагмент, вместо сохранения его состояния.
Использование метода fragmenttransaction.add()
поддерживает экземпляр этого фрагмента живым, даже если я выталкиваю задний стек.
Есть ли способ сделать то же самое с компонентами навигации?
Я тоже читал этот Проблема перезагрузки фрагмента архитектуры навигации но непонятно как его решать.
Фрагменты автоматически восстанавливают свое сохраненное состояние, когда они возвращаются из заднего стека: это верно для нашего без навигации. Похоже, проблема в том, как вы закодировали свой фрагмент.
Вы можете подтвердить, что это проблема с вашим фрагментом, включив «Не сохранять действия», нажав кнопку «Домой», затем вернувшись в свое приложение и посмотрев, полностью ли восстанавливает фрагмент свое состояние. Вы также можете протестировать случай, когда вы правильно обрабатываете изменения конфигурации (т. е. поворачиваете устройство) — опять же, вы должны быть в состоянии восстановить свое состояние именно там, где вы были. Если вы справитесь с обоими этими случаями, то он будет отлично работать и в навигации.
Спасибо Ян, завтра посмотрю
Его вопрос на самом деле закономерен. Это ошибка компонента навигации, и она обсуждается здесь. stackoverflow.com/questions/50485988/… также есть сообщение об ошибке issuetracker.google.com/issues/80029773
@TatiOverflow - нет, это не имеет отношения к этой проблеме. Фрагменты на заднем стеке уже правильно сохраняют и восстанавливают свое состояние. Эта ссылка на проблему предназначена специально для фрагментов нет в заднем стеке.
Я настоятельно рекомендую задавать отдельные вопросы, если у вас есть конкретное представление и т. д., с которыми у вас возникают трудности при сохранении/восстановлении его состояния в любом из этих случаев.