文章目录
背景
前面用到fragment实现过一个新闻app的首页,以及首页滑动选择4个选择栏分别是四个fragment,其中fragment知识点没有总结的比较细致,而且的话里面的内容部分并没有实现只是一个页面,所以这里补充一下知识点。
一、Fragment(碎片)
Fragment 是依赖于 Activity 的可复用 UI 组件,可动态组合页面,提升灵活性和内存效率。
1. 生命周期(重要)
Fragment 生命周期与 Activity 紧密关联,但包含更多细粒度方法,关键阶段及作用如下:
| 方法 | 调用时机 | 核心作用 |
|---|---|---|
onAttach() |
Fragment 与 Activity 关联时调用 | 获取 Activity 引用,初始化参数(通过getArguments(),不可再调用setArguments())。 |
onCreate() |
Fragment 初次创建时调用 | 初始化非 UI 数据(此时 Activity 可能未创建完成,不可依赖 Activity 资源)。 |
onCreateView() |
Fragment 构建 UI 视图时调用 | 通过inflater.inflate()加载布局,返回视图(核心 UI 初始化)。 |
onActivityCreated() |
Activity 的onCreate()完成后调用 |
可安全使用 Activity 资源(如获取 Activity 中的控件)。 |
onStart() |
Fragment 可见时调用(与 Activity 的onStart()同步) |
启动 UI 交互相关资源(如动画、传感器)。 |
onResume() |
Fragment 前台可交互时调用(与 Activity 的onResume()同步) |
准备用户交互(如注册点击监听)。 |
onPause() |
Fragment 失去焦点时调用(与 Activity 的onPause()同步) |
保存临时数据,暂停耗时操作。 |
onStop() |
Fragment 不可见时调用(与 Activity 的onStop()同步) |
释放非必要资源(如停止动画)。 |
onDestroyView() |
Fragment 视图销毁时调用 | 解绑视图资源(下次显示需重新创建视图)。 |
onDestroy() |
Fragment 销毁时调用 | 释放非视图资源(此时仍与 Activity 关联)。 |
onDetach() |
Fragment 与 Activity 解除关联时调用 | 最终资源释放,Fragment 完全脱离 Activity。 |
与 Activity 生命周期对比:Fragment 的生命周期依赖于 Activity,如 Activity 的onStart()触发 Fragment 的onStart(),但 Fragment 多了onAttach()、onCreateView()等 UI 相关方法。
2. 基本用法
Fragment 加载方式分为静态加载和动态加载,动态加载更灵活(实际开发首选)。
-
静态加载:
- 定义 Fragment 布局(如
example_fragment.xml)。 - 自定义 Fragment 类,重写
onCreateView()加载布局。 - 在 Activity 布局中通过``标签引用,指定
android:name为 Fragment 全类名。
<fragment android:id="@+id/fragment" android:name="com.example.ExampleFragment" android:layout_width="match_parent" android:layout_height="match_parent"/> - 定义 Fragment 布局(如
-
动态加载(重要):
- Activity 布局中定义
FrameLayout作为容器(占位符)。 - 通过
FragmentManager和FragmentTransaction动态添加 / 替换 Fragment:
// 步骤1:获取FragmentManager(若用v4包则用getSupportFragmentManager()) FragmentManager fm = getFragmentManager(); // 步骤2:开启事务 FragmentTransaction transaction = fm.beginTransaction(); // 步骤3:创建并添加Fragment到容器 ExampleFragment fragment = new ExampleFragment(); transaction.replace(R.id.fragment_container, fragment); // 替换容器中现有Fragment // 步骤4:提交事务 transaction.commit(); - Activity 布局中定义
FragmentTransaction 关键方法:
add():添加 Fragment 到容器(不销毁现有 Fragment)。replace():移除现有 Fragment 并添加新 Fragment(等效remove()+add())。hide()/show():隐藏 / 显示 Fragment(不销毁视图,保留状态)。addToBackStack(null):将事务加入回退栈(按返回键可恢复上一个 Fragment)。


3659

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



