Fragment中add与replace的区别

217 阅读1分钟

add()方法

  1. 将新的 Fragment 添加到容器中不删除现有 Fragment。
  2. 原有 Fragment 保持 onResume() 状态,新 Fragment 进入生命周期(onAttach() → onCreate() → ... → onResume()
  3. 多个 Fragment 会叠加显示(需手动控制显示/隐藏,否则可能出现 UI 重叠)

replace()方法

  1. 原有 Fragment 会被销毁(触发 onDestroyView() 等),新 Fragment 正常初始化。
  2. 每次替换后容器内只有一个 Fragment 存在。
  3. 适合单页切换场景(每次只展示一个 Fragment,如:视频播放器、地图 Fragment)

回退栈(Back Stack)

  • addToBackStack(null) 时:

    • add():按返回键会回退到上一个状态(可能显示多个叠加的 Fragment)。
    • replace():按返回键会恢复被替换的 Fragment(重新执行其生命周期)

性能使用场景

  • add() + show()/hide()

    • 优势:避免重复创建/销毁 Fragment,提升性能(适合频繁切换的界面,如主内容区 + 悬浮面板、对话框式 Fragment、ViewPager 的相邻页面)。
    • 注意:需手动管理 Fragment 的显示/隐藏,防止 UI 重叠。
  • replace()

    • 优势:简化管理,确保容器内只有一个活跃 Fragment。
    • 代价:频繁替换可能导致性能下降(反复初始化 Fragment)。