BottomNavigation popBackStack() переходит к startDestination вместо предыдущего фрагмента
У меня проблема при использовании компонентов BottomNavigation + Navigation. Обычно при переходе к фрагменту с помощью нижней навигацииpopBackStack()
переносит приложение в startDestination вместо предыдущего фрагмента.
class HomeFragment {
...
bottomNavigation.setupWithNavController(findNavController(R.id.navHost))
...
}
<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/main_navigation"
app:startDestination="@id/splashFragment">
<fragment
android:id="@+id/splashFragment"
android:name="SplashFragment"
android:label="SplashFragment"
tools:layout="@layout/fragment_splash">
<action
android:id="@+id/action_splashFragment_to_A"
app:destination="@id/A" />
</fragment>
<fragment
android:id="@+id/A"
android:name="AFragment"
android:label="AFragment"
tools:layout="@layout/A">
<action
android:id="@+id/action_A_to_B"
app:destination="@id/B" />
</fragment>
<fragment
android:id="@+id/B"
android:name="BFragment"
android:label="BFragment"
tools:layout="@layout/B">
<action
android:id="@+id/actiob_B_to_homeFragment"
app:destination="@id/homeFragment" /> <!--bottomNavigation implemented in this fragment-->
</fragment>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/item1" />
<item
android:id="@+id/item2" />
<item
android:id="@+id/item3" />
</menu>
Когда я перехожу к любому из этих item
фрагмент снизу перейти затем стрелять findNavController().popBackStack()
возвращает приложение в SplashFragment
и должен HomeFragment
, так как там реализована нижняя навигация.
2 ответа
Установите startDestination в качестве дома в onDestroyView Splash или onCreate в Home
findNavController().graph.startDestination = R.id.homeFragment
Вы можете использовать popBackStack(int destinationId, boolean inclusive)
с этими двумя параметрами. этим способом,navController
пытается вернуть задний стек контроллера в определенное место назначения.
см. эту ссылку.
Также у вас есть еще одна возможность открыть заднюю часть вашей навигации.
см. эту ссылку.