如何使用NavController在不将Fragment添加到后退栈中的情况下导航?

6

NavController有一个默认带有回退栈的navigate方法。如何在没有回退栈的情况下导航到片段? 请注意,我不是在询问FragmentTransaction


不要调用 fragmentTransaction.addToBackStack(null); - Mahdi Moqadasi
1
我没有使用 fragmentTransaction - Farrux Bahodirov
然后发布您的代码的至少一部分 - Mahdi Moqadasi
2个回答

7
如果您有一个后退堆栈:
A -> B

And want to get to a back stack of

A -> C

你可以通过从后退栈中弹出B并添加C来执行“替换”操作。
在导航中,可以通过使用XML中的标签中的app:popUpTo(如果需要,还可以使用app:popUpToInclusive="true")或使用相应的NavOptions API来实现。
<action
  android:id="@+id/goToC"
  app:destination="@+id/c"
  app:popUpTo="@+id/b"
  app:popUpToInclusive="true"/>

1
你可以这样做:

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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接