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 пытается вернуть задний стек контроллера в определенное место назначения.

см. эту ссылку.

Также у вас есть еще одна возможность открыть заднюю часть вашей навигации.

см. эту ссылку.

Другие вопросы по тегам