Хорошо, у меня есть приложение с одним действием с navhost
для использования навигации на основе фрагментов. Большинство из них работает нормально, но у меня есть один сценарий, который оставляет меня в замешательстве, поскольку кажется, что я не совсем правильно понимаю некоторые вещи.
Для некоторого дополнительного контекста приложение сфокусировано на сборе данных датчика. Пользователь может начать «сбор» и в течение этого записывать данные датчика несколько раз. Т.е. пользователь переходит в режим сбора, затем начинает запись, маркирует записанные данные, возвращается в режим сбора и может начать другую запись и так далее. Таким образом, навигация выглядит примерно так:
Home --Start collection--> Collection --Start recording--> Record
| |
Save data-- Labelling <--Finish recording
Надеюсь, здесь можно увидеть цикл записи. До маркировки это все простые навигационные действия, переходящие от фрагмента к фрагменту. Переход Save data
- это навигационное действие без пункта назначения, которое использует popUpTo
фрагмент Collection
для завершения sh этого цикла записи. Все это работает, как задумано, но теперь моя путаница начинается, когда дело доходит до поведения кнопки «Назад» телефона.
Если я перемещаюсь вперед до фрагмента Labelling
, а затем нажимаю кнопку возврата, я получить ожидаемый возврат ко всем предыдущим фрагментам вплоть до фрагмента Home
. Это именно то, что я хочу. Если я завершу sh цикл записи и, таким образом, go с помощью действия popUpTo
, все будет происходить неожиданно. Я попадаю на фрагмент Collection
, но нажатие кнопки «назад» ничего не дает. Я бы ожидал, что go вернется к фрагменту Home
, но кажется, что на этом этапе задний стек полностью пуст.
Теперь, мои вопросы :
- Является ли это ожидаемым поведением навигации фрагментов и стека назад, и я использую неправильный подход для моделирования шаблона навигации, который Хочу?
- Если это не ожидаемое поведение, и я использую правильный подход, что я делаю неправильно?
Это определение действия перехода Save data
в моем navgraph:
<action android:id="@+id/action_labelling_to_collection" app:popUpTo="@id/collectionFragment" />