You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Navigation Component中Bottom Navigation点击返回子导航图根页面问题

解决BottomNavigationView点击当前标签返回子导航图根页面的问题

不要替换setupWithNavController设置的OnItemSelectedListener,这会破坏原有导航逻辑。正确的做法是利用OnItemReselectedListener处理已选中标签的点击事件,既保留原有导航配置,又实现返回子导航图根页面的需求。

实现步骤

  1. 正常完成BottomNavigationView与NavController的绑定
val navController = findNavController(R.id.nav_host_fragment_container)
val bottomNav = findViewById<BottomNavigationView>(R.id.bottom_navigation)
bottomNav.setupWithNavController(navController)
  1. 为BottomNavigationView添加OnItemReselectedListener处理重选事件
bottomNav.setOnItemReselectedListener { menuItem ->
    // 构建导航参数:回退到当前标签对应的子导航图根页面
    val navOptions = NavOptions.Builder()
        // setPopUpTo的第一个参数是子导航图的ID,第二个参数设为false表示保留根页面实例
        .setPopUpTo(menuItem.itemId, false)
        .setLaunchSingleTop(true)
        .build()
    
    // 执行导航,自动完成回退到根页面的操作
    navController.navigate(menuItem.itemId, null, navOptions)
}

原理说明

  • setupWithNavController已经帮我们处理了不同标签之间的切换逻辑,无需修改它的OnItemSelectedListener
  • OnItemReselectedListener只会在点击已选中的标签时触发,完美契合当前需求场景
  • 通过setPopUpTo(menuItem.itemId, false),导航系统会自动回退到当前标签对应的子导航图根页面,不会重复创建根页面实例

内容的提问来源于stack exchange,提问作者Treasure Receiver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:13:09