使用FragmentContainerView搭配Navigation Component实现底部导航时Fragment不切换
问题排查与解决方案
1. 根布局尺寸配置错误
你当前activity_dashboard.xml中最外层的ConstraintLayout宽高都设置为0dp,作为根布局它没有上级约束,0dp的配置会导致整个容器无法正常渲染,直接修改根布局的宽高为match_parent即可:
<androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent">
2. Fragment容器和导航栏重叠
当前nav_host_fragment的顶部约束是父布局顶部,会和上方的Toolbar重叠,底部没有做约束也会被BottomNavigationView遮挡,即使Fragment切换了你也看不到内容,需要修改FragmentContainerView的上下约束:
<androidx.fragment.app.FragmentContainerView android:id="@+id/nav_host_fragment" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" <!-- 修改顶部约束为Toolbar底部 --> app:layout_constraintTop_toBottomOf="@id/toolbar" <!-- 修改底部约束为底部导航栏顶部 --> app:layout_constraintBottom_toTopOf="@id/bottom_nav" app:defaultNavHost="true" app:navGraph="@navigation/nav_graph" />
3. 可选校验项
如果修改完上面两个配置还没生效,可以校验以下内容:
- 确认项目依赖的Navigation Component版本不低于2.4.0,避免低版本的兼容bug
- 确认你的父类
PBActivity中没有重写onSupportNavigateUp等导航相关方法干扰跳转逻辑 - 你当前代码里菜单id和导航图id是匹配的,这部分配置没有问题不需要修改
内容的提问来源于stack exchange,提问作者Taimoor Khan
相关产品推荐
相关产品推荐

