Сегодня я начал играть с компонентом навигации Android, чтобы реализовать процесс аутентификации в моем приложении. Идея очень проста: пользователь запускает приложение, и оно отображает одну часть пользовательского интерфейса, если она прошла проверку подлинности, и другую, если она не прошла.
То, что я сделал, в моем методе HomeFragment
onViewCreated
. Я проверяю, аутентифицирован ли пользователь, и если нет, я вызываю метод NavController
* navigate()
, передавая ему идентификатор действие, которое перейдет к AuthenticationFragment
. Все работает нормально, пока пользователь не нажмет кнопку «Назад» в режиме AuthenticationFragment
, потому что тогда я получу эту ошибку . Я до сих пор не знаю, в чем причина такой ошибки, но идея слишком быстрой навигации кажется похожей на мой случай: пункты назначения сначала переключаются с AuthenticationFragment
на HomeFragment
, а затем сразу с HomeFragment
на AuthenticationFragment
опять же, потому что HomeFragment
снова обнаруживает, что пользователь не аутентифицирован.
Несмотря на полученную ошибку, этот подход все еще кажется мне неправильным. Пользователь не должен иметь возможность вернуться к HomeFragment
(и увидеть мерцание экрана, когда фрагменты немедленно переключаются назад и вперед), прежде чем он выполнит аутентификацию. Я также ознакомился с официальным официальным руководством Android по реализации потока аутентификации , но оно мне тоже кажется неправильным, потому что там задействован избыточный третий элемент пользовательского интерфейса (MainFragment
). Я мог бы заменить его заставкой в моем случае, но он все равно остался бы в заднем стеке, и пользователь мог бы вернуться к заставке, что, очевидно, бессмысленно.
Так, каков был бы правильный способ реализовать поток аутентификации, используя новый Навигационный Компонент Android? Мне нужны следующие функции: если пользователь не аутентифицирован, он перенаправляется на интерфейс аутентификации, и если он нажимает кнопку «Назад», он должен выйти из приложения.
ОБНОВЛЕНИЕ: Я знаю, что мог бы просто прослушать событие back press и закрыть приложение оттуда, но я все еще надеюсь, что есть какое-то элегантное решение, использующее компонент навигации Android.