如何使用NavController导航片段而不将其添加到堆栈中?

时间:2018-12-17 15:35:12

标签: android androidx android-architecture-navigation

NavController具有方法navigate,该方法默认情况下使用Backstack进行导航。如何在不使用堆栈的情况下导航到片段? 请注意,我并不是在问FragmentTransaction

2 个答案:

答案 0 :(得分:1)

如果您有以下情况:

A -> B

并且想回到

A -> C

您可以通过从后堆栈中弹出B并添加C来执行“替换”操作。

在导航中,这是通过对XML中的app:popUpTo使用app:popUpToInclusive="true"(如果需要,还可以选择<action>)或使用等效的NavOptions API来完成的。 / p>

<action
  android:id="@+id/goToC"
  app:destination="@+id/c"
  app:popUpTo="@+id/b"
  app:popUpToInclusive="true"/>

答案 1 :(得分:0)

您可以这样做:

val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
val navView: NavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)

appBarConfiguration = AppBarConfiguration(
    setOf(
        R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
        R.id.nav_tools, R.id.nav_share, R.id.nav_send
    ), drawerLayout
)

setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)

navView.setNavigationItemSelectedListener {

    //----------- Pop Back Stack
    navController.popBackStack()
    //---------------------------

    navController.navigate(it.itemId)
    drawerLayout.closeDrawers()

    true
}