Как очистить задний стек фрагментов в компоненте навигации? - PullRequest
0 голосов
/ 17 июня 2019

Я пытался с FragmentManager так:

Navigation.findNavController(mView).popBackStack()

И попробовал использовать FragmentManager.

val fm = activity!!.supportFragmentManager

1

fm.popBackStack()

2

fm.popBackStackImmediate()

Но они не работали. Я имею в виду, кажется, что они вырывают все фрагменты.

Я также пытался применить эти атрибуты в graph_nav.xml:

app:launchSingleTop="true"
app:popUpToInclusive="true"

Я применил их во фрагменте А, а также во фрагменте В.

Я хочу перейти к фрагменту B из фрагмента A. И я хочу очистить весь стек фрагментов перед фрагментом B и просто оставить фрагмент B. в одиночку.

1 Ответ

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

Вам необходимо добавить app:popUpToInclusive="true", app:launchSingleTop="true" и app:popUpTo="nav_graph_id" к тегу action в вашем nav_graph.xml.

<fragment
android:id="@+id/firstFragment"
android:name="com.example.ui.FirstFragment"
android:label="First"
tools:layout="@layout/fragment_first" >
<action
    android:id="@+id/clearBackStack"
    app:destination="@id/secondFragment"
    app:launchSingleTop="true"
    app:popUpTo="@+id/nav_graph"
    app:popUpToInclusive="true" /></fragment>

Затем построить проект (чтобы был создан файл направлений)), и напишите это:

findNavController().navigate(FirstFragmentDirections.clearBackStack())

Даже если у вас есть несколько nav_graphs, задайте идентификатор popUpTo для основного / домашнего nav_graph, а не тот, где вы пишете это действие, например, ваш главный nav_graph - это main_nav_graph.xml ", и вы пишете приведенный выше код в" some_other_nav_graph.xml ", устанавливаете идентификатор main_nav_graph.xml.

...