首页 > 解决方案 > 无法使用导航组件清除所有片段的回栈

问题描述

我正在使用 Android 导航组件并面临一个奇怪的问题。无论我尝试什么,我都无法清除向上按钮的后退堆栈。

我的导航图如下所示:

导航图

让我们以 LoginFragment 为例,

<fragment
    android:id="@+id/loginFragment"
    android:name="com.yashovardhan99.firebaselogin.LoginFragment"
    android:label="Login"
    tools:layout="@layout/fragment_login" >
    <action
        android:id="@+id/action_loginFragment_to_welcomeFragment"
        app:destination="@id/welcomeFragment"
        app:popUpTo="@+id/nav_graph"
        app:popUpToInclusive="true" />
</fragment>

要导航的 Java 代码是:

navController.navigate(
        LoginFragmentDirections.actionLoginFragmentToWelcomeFragment());

我已将 PopUpTo 设置为图形 ID,并将 Inclusive 设置为 true。这应该在移动到 WelcomeFragment 时清除后台堆栈。但是,WelcomeFragment 仍然在操作栏上显示 Up 按钮,按下它会将我带回 PreLoginFragment(这是图表的主目的地)。奇怪的是,按下后退按钮会让我按预期退出应用程序。

标签: androidandroid-fragmentsandroid-jetpackandroid-architecture-navigation

解决方案


我用它解决了AppBarConfiguration

val appBarConfiguration = AppBarConfiguration
            .Builder(
                    R.id.preLoginFragment,
                    R.id.welcomeFragment
              )
            .build()

然后,而不是setupActionBarWithNavController(this, navController)你需要打电话setupActionBarWithNavController(this, navController, appBarConfiguration)

在这里,我声明了两个顶级片段,其中后退箭头不会显示在应用栏中。


推荐阅读