0

使用 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,因为实现了底部导航。

4

2 回答 2

0

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

看到这个链接

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

看到这个链接

于 2020-03-05T15:01:34.240 回答
0

在 Splash 的 onDestroyView 或 Home 的 onCreate 中将 startDestination 设置为 home

findNavController().graph.startDestination = R.id.homeFragment

于 2020-04-20T03:20:49.170 回答