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

如何防止BottomNavigation点击EarningFragment时恢复嵌套的MoneyDetailFragment

解决方案

要实现点击底部导航的Earnings项时直接打开EarningFragment而非恢复之前的MoneyDetailFragment状态,核心是强制重置该导航项的栈到根目的地,具体修改如下:

修改MainActivity中的底部导航逻辑

替换原有的setupWithNavController默认逻辑,手动处理底部导航项的点击事件,针对Earnings项添加栈重置操作:

private fun setupBottomNavigationView() {
    BottomNavigationViewHelper.setupBottomNavigationView(binding.bottomBar.bottomNavViewBar)
    
    // 手动处理底部导航点击事件,替换默认的setupWithNavController
    binding.bottomBar.bottomNavViewBar.setOnItemSelectedListener { item ->
        when (item.itemId) {
            R.id.miEarnings -> {
                // 导航到EarningFragment,同时清空该栈内的所有子页面
                navHostFragment.navController.navigate(R.id.miEarnings) {
                    // 弹出到miEarnings并包含自身,确保栈内只有根页面
                    popUpTo(R.id.miEarnings) {
                        inclusive = true
                    }
                    // 避免重复点击时重复创建页面
                    launchSingleTop = true
                }
                true
            }
            else -> {
                // 其他导航项保留默认状态恢复逻辑
                NavigationUI.onNavDestinationSelected(item, navHostFragment.navController)
            }
        }
    }
}

代码说明

  • popUpTo(R.id.miEarnings) { inclusive = true }:将导航栈中从当前页面到miEarnings的所有页面弹出,同时重新创建miEarnings实例,确保每次点击都是全新的根页面。
  • launchSingleTop = true:防止重复点击同一导航项时重复创建页面,提升性能。
  • 其他导航项沿用默认逻辑,保留原有状态恢复功能。

注意事项

确保底部导航菜单中Earnings项的android:id与导航图里的miEarnings id完全一致,否则点击事件无法匹配。


内容的提问来源于stack exchange,提问作者Ahmet Yılmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:52:36