【问题标题】:How to navigate fragment without adding it into backstack with NavController?如何在不使用 NavController 将其添加到 backstack 的情况下导航片段?
【发布时间】:2018-12-17 15:35:11
【问题描述】:

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

【问题讨论】:

  • 只是不要打电话给fragmentTransaction.addToBackStack(null);
  • 我没有使用fragmentTransaction
  • 然后发布至少部分代码

标签: android androidx android-architecture-navigation


【解决方案1】:

如果您有以下堆栈:

A -> B

又想去回栈

A -> C

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

在 Navigation 中,这通过使用 app:popUpTo(如果需要,还可以选择 app:popUpToInclusive="true")到 XML 中的 <action> 或使用等效的 NavOptions API 来完成。

<action
  android:id="@+id/goToC"
  app:destination="@+id/c"
  app:popUpTo="@+id/b"
  app:popUpToInclusive="true"/>

【讨论】:

    【解决方案2】:

    你可以这样做:

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 2013-05-18
      • 2012-02-29
      相关资源
      最近更新 更多