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