简体   繁体   English

如何在不使用 NavController 将片段添加到后台堆栈的情况下导航片段?

[英]How to navigate fragment without adding it into backstack with NavController?

NavController has methods navigate which navigate by default with backstack. NavController具有navigate方法,默认情况下使用 backstack 进行导航。 How to navigate to the fragment without having backstack?如何在没有 backstack 的情况下导航到片段? Please note that, I am not asking about FragmentTransaction请注意,我不是在询问FragmentTransaction

If you have a back stack of:如果您有以下堆栈:

A -> B

And want to get to a back stack of并想回到后面的堆栈

A -> C

You can do a 'replace' operation by popping B off the back stack and adding C.您可以通过从返回堆栈中弹出 B 并添加 C 来执行“替换”操作。

In Navigation, this is done by using app:popUpTo (and optionally app:popUpToInclusive="true" if needed) to the <action> in your XML or by using the equivalent NavOptions API.在导航中,这是通过对 XML 中的<action>使用app:popUpTo (如果需要,还可以选择app:popUpToInclusive="true" )或使用等效的NavOptions API 来完成的。

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

You can do it like this:你可以这样做:

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
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM