如何隐藏通知跳转至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
相关产品推荐
相关产品推荐

