Вы можете выполнить оба этих действия с помощью findNavController().NavigateUp()
Например, на следующем графике:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/test_nav_graph"
app:startDestination="@id/a">
<fragment
android:id="@+id/a"
android:name="fragment.A"
tools:layout="@layout/a_fragment"
android:label="A" >
<action
android:id="@+id/action_a_to_b"
app:destination="@id/b" />
<action
android:id="@+id/action_a_to_c"
app:destination="@id/c" />
</fragment>
<fragment
android:id="@+id/b"
android:name="fragment.B"
tools:layout="@layout/b_fragment"
android:label="B" >
<action
android:id="@+id/action_b_to_d"
app:destination="@id/d" />
</fragment>
<fragment
android:id="@+id/c"
tools:layout="@layout/c_fragment"
android:name="fragment.C"
android:label="C" >
<action
android:id="@+id/action_c_to_d"
app:destination="@id/d"
app:popUpTo="@id/a"/>
</fragment>
<fragment
android:id="@+id/d"
tools:layout="@layout/d_fragment"
android:name="fragment.D"
android:label="D" />
</navigation>
Когда вы выбираете путь : A-> B-> D ваш задний стек A, B, D, и когда вы звоните NavigateUp()
, вы go возвращаетесь к B
.
Теперь путь A -> C - > D имеет незначительное добавление в теге action
, как вы можете видеть
<action
android:id="@+id/action_c_to_d"
app:destination="@id/d"
app:popUpTo="@id/a"/>
, имеет popUpTo , поэтому при переходе от C
к D
app:popUpTo
говорит библиотеке навигации, чтобы некоторые пункты назначения покинули задний стек как часть вызова navigate()
, поэтому после перехода к D ваш задний стек A, D и NavigateUp()
возвращает вас к A