繁体   English   中英

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

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

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

如果您有以下堆栈:

A -> B

并想回到后面的堆栈

A -> C

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

在导航中,这是通过对 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"/>

你可以这样做:

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