05-Fragment修订差异说明
Fragment 修订差异说明
1. 原 PDF 内容范围
原 PDF 主要包括:
- Fragment 为什么被称为“第五大组件”。
- Fragment 静态加载和动态加载。
- Fragment 与 ViewPager 搭配。
- Fragment 生命周期。
- Fragment 与 Activity、Fragment 与 Fragment 的通信。
- Fragment 的 add/remove、hide/show、detach/attach 切换方式。
2. 主要修订点
| 原 PDF 表述 | 修订后表述 | 原因 |
|---|---|---|
| Fragment 可以称为第五大组件 | 这是民间说法,不是官方四大组件同级概念 | Fragment 不能独立存在,必须依附 Activity 或父 Fragment |
静态加载使用 <fragment> 标签 |
推荐 FragmentContainerView |
<fragment> 可能让 Fragment 生命周期超出 FragmentManager 状态,不是现代推荐写法 |
| FragmentPagerAdapter 页面少、FragmentStatePagerAdapter 页面多 | 新项目推荐 ViewPager2 + FragmentStateAdapter | ViewPager 及旧 Adapter 已被废弃 |
生命周期中继续强调 onActivityCreated() |
改为 onViewCreated() / onCreate() |
onActivityCreated() 已废弃 |
Fragment 通信通过 getActivity() 或 Activity 中转 |
推荐 Shared ViewModel / Fragment Result API | 降低耦合,生命周期更安全 |
| replace 不算切换方式,只是 remove + add | replace 仍是常见切换方式 | 它确实接近 remove + add,但仍是实际项目常用 API |
detach/attach 后 isAdded() 的表述不确定 |
删除不确定结论,重点解释 View 销毁与实例保留 | 原文写了“需要再次确认”,不适合作为结论 |
3. 补充内容
本次补充了:
- AndroidX Fragment 与
android.app.Fragment的区别。 - Fragment 自身生命周期与 View 生命周期的区别。
viewLifecycleOwner的使用场景。- ViewBinding 在
onDestroyView()置空的原因。 - Fragment Result API。
- Shared ViewModel。
commit()、commitNow()、commitAllowingStateLoss()的区别。- Jetpack Navigation 的推荐位置。
- ViewPager2 + FragmentStateAdapter。
4. 面试版最终结论
Fragment 面试不要只背生命周期顺序,重点要讲出:
- Fragment 不是官方第五大组件,它依附宿主存在。
- Fragment 有自己的生命周期,但生命周期受宿主和 FragmentManager 共同控制。
- Fragment 的 View 生命周期和 Fragment 实例生命周期不同。
onActivityCreated()已过时,初始化 View 放onViewCreated()。- Fragment 通信优先使用 ViewModel 或 Fragment Result API。
- Fragment 切换要根据场景选择:普通跳转用 replace/Navigation,底部 Tab 用 hide/show 或 Navigation 多返回栈。