BottomNavigation popBackStack()导航到startDestination而不是上一个片段

问题描述 投票:0回答:1

使用BottomNavigation +导航组件时出现问题。基本上,当通过底部导航导航到片段时,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,因为已实现了底部导航。

android android-architecture-navigation android-bottomnavigationview
1个回答
0
投票

您可以将popBackStack(int destinationId, boolean inclusive)与这两个参数一起使用。通过这种方式,navController尝试将控制器的后堆栈弹出回到特定的目的地。

请参阅此link

此外,您还有另一个选择可以弹出导航的后堆栈。

请参阅此link

© www.soinside.com 2019 - 2024. All rights reserved.