Отключить добавление фрагмента в backstack в компоненте архитектуры навигации - PullRequest
0 голосов
/ 27 сентября 2018

Предположим, у меня есть 4 фрагмента: A, B, C, X, и я могу перемещаться между ними следующим образом:

... -> A -> C -> X    and ... -> B -> C -> X

Но когда я нахожусь во фрагменте X, звоните mNavController.navigateUp() Я хочупропустить фрагмент C и перейти к фрагменту A или B. Что мне нужно сделать?

UPD: мне нужно решение только для компонента архитектуры навигации https://developer.android.com/topic/libraries/architecture/navigation/ Спасибо!

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Как упомянуто @bentesha, это работает таким образом, что будет извлекать фрагменты до фрагмента C. включительно.

Вы также можете добиться этого, как показано ниже:

NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentA, false);

ИЛИ

NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentB, false);

И это всплывет исключительно для фрагмента A / фрагмента B, я думаю, что это самый описательный способ для вас и других понять.

0 голосов
/ 18 марта 2019

В качестве альтернативы вы можете использовать атрибуты app:popUpTo и app:popUpToInclusive в навигационном ресурсе xml для автоматической очистки заднего стека при выполнении определенных транзакций, поэтому кнопка возврата / вверх приведет вашего пользователя к корневому фрагменту.

<fragment
    android:id="@+id/fragment1"
    android:name="com.package.Fragment1"
    android:label="Fragment 1">

    <action
        android:id="@+id/action_fragment1_to_fragment2"
        app:destination="@id/fragment2"
        app:popUpTo="@id/fragment1"
        app:popUpToInclusive="true / false" />

</fragment>
0 голосов
/ 27 сентября 2018

Учитывая R.id.fragmentC - это имя пункта назначения C, из пункта назначения X вы можете сделать следующее:

NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentC, true);

Это должно удалить все пункты назначения из стека до C, и оставить либо A, либоB на вершине стека.

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