[英]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.