add和replace是FragmentTransaction中两个最基础也最易混淆的操作,它们的区别直接影响到Fragment的视图层级和生命周期。而回退栈则是实现Fragment导航的关键。理解这两者,是构建复杂、可回退的Fragment界面的基础。”
第一部分:add 与 replace 的本质区别
核心区别在于:它们修改的是不同的东西。add操作的是FragmentManager中的Fragment列表,而replace操作的是容器视图中的内容。
为了更直观地理解这一核心机制,下图展示了在一次replace操作中,容器内视图的完整切换流程及对应的回退栈记录:

让我们结合代码和图表进行详细分析:
add 操作
-
行为:将一个新的Fragment添加到
FragmentManager的管理列表中,并将其视图添加到指定的容器视图中。 -
生命周期:被添加的Fragment会经历完整的生命周期,直到
onResume(如果Activity已处于resumed状态)。 -
视图层级:多次
add操作会导致多个Fragment的视图在容器中重叠。后添加的Fragment视图会盖住先添加的。 -
场景:适用于需要同时显示多个Fragment的场景,例如画中画、仪表盘等。
kotlin
supportFragmentManager.beginTransaction()
.add(R.id.container, FragmentA()) // 第一次add,显示A

最低0.47元/天 解锁文章
1187

被折叠的 条评论
为什么被折叠?



