NavController
具有方法navigate
,该方法默认情况下使用Backstack进行导航。如何在不使用堆栈的情况下导航到片段?
请注意,我并不是在问FragmentTransaction
答案 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
}