You need to enable JavaScript to run this app. Navigation跳转Fragment时Toolbar先改标题再隐藏的问题如何修复
优惠活动
大模型
产品
解决方案
定价
更多

Navigation跳转Fragment时Toolbar先改标题再隐藏的问题如何修复

问题原因

你遇到的Toolbar闪烁是因为Navigation组件的setupActionBarWithNavController绑定逻辑会在导航动作触发后、目标Fragment生命周期执行前,优先根据导航图中目标节点配置的label属性自动更新Toolbar标题。而你把隐藏ActionBar的逻辑写在了第二个Fragment的onCreateView中,执行时机远晚于标题更新动作,就出现了先变标题再隐藏的视觉差。

修复方案

方案1:全局监听导航目的地变更(最推荐)

在宿主Activity的onCreate方法中给NavController添加OnDestinationChangedListener,在导航变更触发的第一时间判断目标页面是否需要隐藏Toolbar,提前执行显隐逻辑,不需要依赖Fragment的生命周期回调:

// 宿主Activity onCreate 中添加以下代码
val navController = findNavController(R.id.nav_host_fragment)
// 原有初始化逻辑保留,比如setupActionBarWithNavController
setupActionBarWithNavController(navController, appBarConfiguration)

// 新增目的地变更监听
navController.addOnDestinationChangedListener { _, destination, _ ->
    when(destination.id) {
        R.id.secondFragment -> supportActionBar?.hide()
        else -> supportActionBar?.show()
    }
}

修改完成后删除第二个FragmentonCreateView中的隐藏ActionBar代码,避免重复执行。

方案2:跳转前提前隐藏Toolbar

如果只有这一个跳转场景需要隐藏Toolbar,也可以在触发导航的位置先执行隐藏逻辑再跳转:

// FirstFragment 跳转逻辑处修改
(activity as AppCompatActivity).supportActionBar?.hide()
findNavController().navigate(FirstFragmentDirections.navigateToSecondFragment(argument))

同时在FirstFragment的onResume中添加Toolbar恢复逻辑,避免返回后Toolbar不显示:

override fun onResume() {
    super.onResume()
    (activity as AppCompatActivity).supportActionBar?.show()
}

如果你的项目中使用的是自定义Toolbar而非原生ActionBar,只需把上述代码中supportActionBar?.hide()/show()替换为自定义Toolbar的visibility属性控制即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 15:06:00