1、Fragment定义
应用界面中可重复使用的一部分,可以理解为模块化的Activity。
1.1 与Activity的关系
1.Fragment不能独立存在,必须嵌入到Activity中;
2. 一个Activity可以运行多个Fragment;
3. Activity是屏幕的主题,而Fragment是Activity的一个组成元素;
4. Fragment有自己的生命周期,接受它自己的事件,并可以在Activity运行时被添加或删除;
5.Fragment的生命周期受Activity生命周期的影响。如Activity暂停时,它拥有的所有Fragment都会暂停。
2、Fragment作用
支持动态、灵活的界面设计
- Fragment从Android 3.0 后引入
- 在低版本Android 3.0 前使用Fragment,需要采用android-support-v4.jar兼容包
Fragment的设计思想是解决不同分辨率的终端适配问题,例如:平板与手机。Activity是不可拆分的,Fragment可以灵活组合。
3、生命周期
每个Fragment实例都有自己的生命周期。当用户浏览且与应用进行交互时,Fragment片段将会在添加、删除、进入或退出屏幕时,会在生命周期的不同状态中转换。
3.1 生命周期图
Fragment生命周期,及与Activity生命周期对比
3.2 Fragment生命周期解析
- 当一个Fragment被创建时,调用方法:
onAttach():当Fragment依附到Activity时调用的方法;
onCreate():当Fragment创建时调用的方法;
onCreateView():给Fragment加载布局时调用的方法;
onActivityCreated():当该Fragment依附的Activity创建时调用的方法。
- 当这个fragment对用户可见的时候,调用方法
onStart():当Fragment启动时调用的方法;
onResume():当Fragment正在运行时调用的方法;
- 当Fragment进入"后台模式"时,调用方法
onPause():当Fragment不在交互时调用的的方法;
onStop():当Fragment不再可见时调用的方法;
- 当Fragment被销毁(或者持有它的activity被销毁)
onPause()
onStop()
onDestroyView():销毁Fragment布局时调用的方法;
onDestroy():当Fragment销毁时调用的方法;
onDetach():当Fragment完全脱离Activity时调用的方法。
- 就像Activity一样,在以下状态中,可以使用Bundle对象保存一个Fragment对象
onCreate()
onCreateView()
onActivityCreated()
3.3 其他场景的调用
- 屏幕灭掉
onPause() onSaveInstanceState() onStop()
- 屏幕解锁
onStart() onResume()
- 切换到其他Fragment
onPause() onStop() onDestroyView()
- 切换回本身的Fragment
onCreateView() onActivityCreated() onStart() onResume()
- 回到桌面
onPause() onSaveInstanceState() onStop()
- 回到应用
onStart() onResume()
- 退出应用
onPause() onStop() onDestroyView() onDestroy() onDetach()
4、Fragment加载
4.1 静态加载
- 在Activity的Layout.xml布局文件中静态添加
activity_list_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/fragmenttest"
android:layout_width="200dp"
android:layout_height="200dp"
android:name="com.laoda.androdstudy.Fragment.fragmentTest"/>
<fragment
android:id="@+id/fragmenttest1"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:name="com.laoda.androdstudy.Fragment.fragmentTest"/>
</RelativeLayout>
- Fragment布局文件
fragment_test.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black">
<TextView
android:id="@+id/fragmentlist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="fragmentlist"
android:layout_centerInParent="true"
android:textColor="#FFFFFF"