Условная обратная навигация с компонентом навигации Android - PullRequest
0 голосов
/ 29 ноября 2018

Я делаю навигацию в моем приложении, используя навигационный компонент из Jetpack.В моем приложении 3 экрана, все они реализованы с помощью фрагмента:
- экран поиска
- экран списка
- экран подробностей

Когда пользователь нажимает кнопку поиска (на search screen),приложение переходит к list screen загружает результаты и отображает их.Пользователь выбирает один из результатов и переходит к detail screen.Если результат только один, приложение автоматически переходит от list screen к detail screen, фактически пропуская экран списка.

Проблема заключается в обратной навигации: когда было несколько результатов, мне нужно вернуться к list screen, но если был только один результат, мне нужно вернуться обратно к search screen.Я хочу просто позвонить navigateUp, но это приведет меня к list screen (во всех случаях) и затем к detail screen, если будет только один результат.

При непосредственном использовании FragmentTransaction мыможет replace текущий фрагмент с и вызывать addToBackStack только если мы хотим вернуться к нему позже.При использовании компонента навигации мы можем просто navigate, и он ведет себя как replace + addToBackStack.

Как я могу добиться поведения замены без добавления в backstack, используя компонент архитектуры?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Наконец мне удалось как этого добиться.Теперь у меня есть два действия с одним и тем же началом и назначением, их единственная разница - атрибут popUpTo.

<action
    android:id="@+id/action_listFragment_to_detailFragement"
    app:destination="@id/detailFragment"/>

<action
    android:id="@+id/action_listFragment_to_detailFragement_pop"
    app:destination="@id/detailFragment"
    app:popUpTo="@id/listFragment"
    app:popUpToInclusive="true" />

action_listFragment_to_detailFragement используется, когда пользователь выполняет переход вручную, и он должен вернуться к экрану списка позже

action_listFragment_to_detailFragement_pop используется, когда переход выполняется автоматически и после возврата экран списка не должен отображаться.

0 голосов
/ 29 ноября 2018

В компоненте навигации вы можете использовать метод NavController.popBackStack(int action), который работает аналогично addToBackStack(null).

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