如何在Android中使用Jetpack Navigation在一个Activity中显示两个Fragment
解决方案
要在MainActivity中直接显示两个同级Fragment,无需依赖Navigation组件的导航图(nav_graph),可以通过静态添加Fragment的方式实现,具体步骤如下:
1. 修改MainActivity.xml布局
移除关联nav_graph的FragmentContainerView,改用普通布局容器(如ConstraintLayout、LinearLayout)承载两个Fragment,直接在布局中声明这两个Fragment的实例。
示例代码(以左右分栏的ConstraintLayout为例):
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 第一个Fragment --> <fragment android:id="@+id/first_fragment" android:name="com.yourpackage.FirstFragment" android:layout_width="0dp" android:layout_height="match_parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@id/second_fragment" app:layout_constraintHorizontal_weight="1" /> <!-- 第二个Fragment --> <fragment android:id="@+id/second_fragment" android:name="com.yourpackage.SecondFragment" android:layout_width="0dp" android:layout_height="match_parent" app:layout_constraintStart_toEndOf="@id/first_fragment" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_weight="1" /> </androidx.constraintlayout.widget.ConstraintLayout>
2. 移除Navigation相关配置
- 删除原
FragmentContainerView的app:navGraph属性(如果还有残留) - 无需再维护
nav_graph.xml中的起始目标配置,因为两个Fragment是直接静态加载到Activity布局中的,属于同一层级,不存在导航跳转的起始关系
关键说明
- 这种方式是静态添加Fragment,Activity启动时会自动初始化并加载这两个Fragment,它们处于同一层级,共享Activity的布局空间
- 如果后续需要对这两个Fragment进行动态操作(如隐藏、显示),可以在MainActivity中通过
supportFragmentManager.findFragmentById()获取实例后进行处理
内容的提问来源于stack exchange,提问作者Pintu Parikh
相关产品推荐
相关产品推荐

