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

如何隐藏通知跳转至Fragment时MainActivity的底部导航栏?

解决方案

方法1:通过导航目的地监听统一控制底部导航栏

在MainActivity中添加导航目的地变化监听,根据当前显示的Fragment动态切换底部导航栏的显示状态,不管是正常跳转还是通知DeepLink跳转都会生效:

// 在MainActivity的onCreate方法内初始化导航控制器后添加监听
val navController = findNavController(R.id.nav_host_fragment)
navController.addOnDestinationChangedListener { _, destination, _ ->
    when (destination.id) {
        R.id.navigation_pairAnimation -> bottomNavigationView.visibility = View.GONE
        R.id.navigation_fragment1, R.id.navigation_fragment2, R.id.navigation_fragment3 -> 
            bottomNavigationView.visibility = View.VISIBLE
    }
}

方法2:给DeepLink添加标记参数,针对性处理

修改PendingIntent的构建代码,添加一个标记参数说明是从通知跳转:

val pendingIntent = NavDeepLinkBuilder(requireContext())
    .setComponentName(MainActivity::class.java)
    .setGraph(R.navigation.mobile_navigation)
    .setDestination(R.id.navigation_pairAnimation)
    .setArguments(bundleOf("from_notification" to true))
    .createPendingIntent()

然后在MainActivity的导航监听中读取参数并隐藏底部导航栏:

navController.addOnDestinationChangedListener { _, destination, arguments ->
    if (destination.id == R.id.navigation_pairAnimation) {
        val fromNotification = arguments?.getBoolean("from_notification", false) ?: false
        if (fromNotification) {
            bottomNavigationView.visibility = View.GONE
        }
    }
    // 其他Fragment的显示逻辑保持不变
}

方法3:为配对Fragment设置独立宿主(可选)

如果配对Fragment的业务逻辑相对独立,可以为它创建一个不带底部导航栏的新Activity,直接通过通知跳转到这个Activity,彻底避免底部导航栏的干扰。这种方式改动稍大,适合不需要和其他三个Fragment共享导航栈的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:30:46