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

如何在Fragment中嵌套添加另一个Fragment?

当然可以在Fragment内部嵌套另一个Fragment!

完全没问题的,Android原生就支持Fragment的嵌套场景,你要在Fragment F1中添加子Fragment F1.1,按照下面的步骤操作就可以实现:

步骤1:给F1准备子Fragment的容器

首先在F1对应的布局文件里,添加一个FrameLayout(或者你想用的其他ViewGroup)作为F1.1的容器,示例代码如下:

<!-- F1的布局文件,比如fragment_f1.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!-- F1自身的其他视图 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这是Fragment F1的内容"/>

    <!-- 子Fragment F1.1的容器 -->
    <FrameLayout
        android:id="@+id/fragment_container_f1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

</LinearLayout>

步骤2:在F1的代码中添加子Fragment

在F1的代码里,获取子Fragment管理器(划重点:必须用getChildFragmentManager(),不能用getFragmentManager()或者getParentFragmentManager(),否则会出现生命周期管理的问题),然后通过Fragment事务添加F1.1到容器中。

Kotlin示例:

class F1Fragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_f1, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        // 检查是否已经添加过子Fragment,避免重复添加
        if (childFragmentManager.findFragmentById(R.id.fragment_container_f1) == null) {
            val childFragment = F11Fragment()
            childFragmentManager.beginTransaction()
                .add(R.id.fragment_container_f1, childFragment)
                .commit()
        }
    }
}

Java示例:

public class F1Fragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_f1, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        // 避免重复添加子Fragment
        if (getChildFragmentManager().findFragmentById(R.id.fragment_container_f1) == null) {
            F11Fragment childFragment = new F11Fragment();
            getChildFragmentManager().beginTransaction()
                    .add(R.id.fragment_container_f1, childFragment)
                    .commit();
        }
    }
}

步骤3:实现子Fragment F1.1

这一步就和你创建普通Fragment一样,写自己的布局和逻辑就行,比如:

class F11Fragment : Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_f11, container, false)
    }
}

注意事项

  • 一定要使用getChildFragmentManager()来管理子Fragment,它是专门为嵌套Fragment设计的管理器,能正确处理子Fragment的生命周期。
  • 在添加子Fragment时最好做一下判断,避免在屏幕旋转等重建场景下重复添加。

附上你提供的布局示意图:
Fragment嵌套布局示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:14:46