无法使用导航组件清除所有片段的后堆栈

时间:2019-06-17 06:45:21

标签: android android-fragments android-jetpack android-architecture-navigation

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

我的导航图如下:

Navigation Graph

让我们以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在操作栏上仍显示“向上”按钮,按下它会将我带回到PreLoginFragment(这是图形的原始目标)。奇怪的是,按后退按钮可以按预期将我带出应用程序。

1 个答案:

答案 0 :(得分:0)

我使用 AppBarConfiguration

解决了它
val appBarConfiguration = AppBarConfiguration
            .Builder(
                    R.id.preLoginFragment,
                    R.id.welcomeFragment
              )
            .build()

然后,您需要调用 setupActionBarWithNavController(this, navController) 而不是 setupActionBarWithNavController(this, navController, appBarConfiguration)

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