Поток аутентификации с использованием компонента навигации Android - PullRequest
1 голос
/ 17 марта 2019

Сегодня я начал играть с компонентом навигации Android, чтобы реализовать процесс аутентификации в моем приложении. Идея очень проста: пользователь запускает приложение, и оно отображает одну часть пользовательского интерфейса, если она прошла проверку подлинности, и другую, если она не прошла.

То, что я сделал, в моем методе HomeFragment onViewCreated. Я проверяю, аутентифицирован ли пользователь, и если нет, я вызываю метод NavController * navigate(), передавая ему идентификатор действие, которое перейдет к AuthenticationFragment. Все работает нормально, пока пользователь не нажмет кнопку «Назад» в режиме AuthenticationFragment, потому что тогда я получу эту ошибку . Я до сих пор не знаю, в чем причина такой ошибки, но идея слишком быстрой навигации кажется похожей на мой случай: пункты назначения сначала переключаются с AuthenticationFragment на HomeFragment, а затем сразу с HomeFragment на AuthenticationFragment опять же, потому что HomeFragment снова обнаруживает, что пользователь не аутентифицирован.

Несмотря на полученную ошибку, этот подход все еще кажется мне неправильным. Пользователь не должен иметь возможность вернуться к HomeFragment (и увидеть мерцание экрана, когда фрагменты немедленно переключаются назад и вперед), прежде чем он выполнит аутентификацию. Я также ознакомился с официальным официальным руководством Android по реализации потока аутентификации , но оно мне тоже кажется неправильным, потому что там задействован избыточный третий элемент пользовательского интерфейса (MainFragment). Я мог бы заменить его заставкой в ​​моем случае, но он все равно остался бы в заднем стеке, и пользователь мог бы вернуться к заставке, что, очевидно, бессмысленно.

Так, каков был бы правильный способ реализовать поток аутентификации, используя новый Навигационный Компонент Android? Мне нужны следующие функции: если пользователь не аутентифицирован, он перенаправляется на интерфейс аутентификации, и если он нажимает кнопку «Назад», он должен выйти из приложения.

ОБНОВЛЕНИЕ: Я знаю, что мог бы просто прослушать событие back press и закрыть приложение оттуда, но я все еще надеюсь, что есть какое-то элегантное решение, использующее компонент навигации Android.

1 Ответ

0 голосов
/ 18 июня 2019

В вашем фрагменте логина вам нужно объявить действие «Всплывающее окно» из домашнего фрагмента.

  1. Это выталкивает все несоответствующие назначения из заднего стека до этот пункт назначения найден.
  2. "popUpToInclusive = true" извлекает заданный пункт назначения из backstack

    <fragment android:id="@+id/loginFragment" android:name="com.example.navigationsample.fragments.Login" android:label="Login_Fragment" tools:layout="@layout/layout_login"> <action android:id="@+id/action_loginFragment_to_homeFragment" app:destination="@id/homeFragment" app:popUpTo="@id/loginFragment" app:popUpToInclusive="true"/> </fragment>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...