第5章Fragment基础 学习目标  掌握Fragment的生命周期。  掌握Fragment的应用。  掌握Fragment与Activity之间的通信。 随着移动设备的快速发展,平板电脑越来越普及,而平板电脑与手机的最大差别就在于屏幕的大小。为了同时兼顾手机和平板电脑的开发,自Android 3.0(API 11)开始引入了Fragment。接下来对Fragment进行详细的介绍。 5.1Fragment概述 Fragment翻译为中文就是“碎片”的意思,它是一种嵌入到Activity中使用的UI片段。一个Activity中可以包含一个或多个Fragment,而且一个Activity可以同时展示多个Fragment。使用它能够让程序更加合理地利用拥有大屏幕空间的移动设备,因此Fragment在平板电脑上应用非常广泛。 Fragment与Activity类似,也拥有自己的布局与生命周期,但是它的生命周期会受到它所在的Activity的生命周期的控制。例如,当Activity暂停时,它所包含的Fragment也会暂停; 当Activity被销毁时,该Activity内的Fragment也会被销毁; 当该Activity处于活动状态时,开发者才可独立地操作Fragment。 为了更加清楚地讲解Fragment的功能,接下来通过一个图例来说明,如图51所示。 图51Fragment的功能 从图51可以看出,在一般的手机或者平板电脑竖屏情况下,Fragment1需要嵌入到Activity1中,Fragment2需要嵌入到Activity2中; 如果在平板电脑横屏的情况下,则可以把两个Fragment同时嵌入到Activity1中,这样的布局既节约了空间,也会更美观。 5.2Fragment生命周期 通过第3章的学习,我们知道Activity生命周期有3种状态,分别是运行状态、暂停状态和停止状态。Fragment与Activity非常相似,其生命周期也会经历这几种状态。 图52Fragment和Activity 生命周期对比图 接下来详细介绍这几种状态。 运行状态: 当嵌入该Fragment的Activity处于运行状态时,并且该Fragment是可见的,那么该Fragment是处于运行状态的。 暂停状态: 当嵌入该Fragment的Activity处于暂停状态时,那么该Fragment也是处于暂停状态的。 停止状态: 当嵌入该Fragment的Activity处于停止状态时,那么该Fragment也会进入停止状态。或者通过调用FragmentTranslation的remove()、replace()方法将Fragment从Activity中移除。 Fragment必须是依存于Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。图52很好地说明了两者生命周期的关系。 可以看到,Fragment比Activity多了几个额外的生命周期回调方法。  onAttach(Activity): 当Fragment与Activity发生关联时调用。  onCreateView(LayoutInflater,ViewGroup,Bundle): 创建该Fragment的视图(加载布局)时调用。  onActivityCreated(Bundle): 当Activity(与Fragment相关联)的onCreate方法返回时调用。  onDestroyView(): 与onCreateView相对应,当与该Fragment关联的视图被移除时调用。  onDetach(): 与onAttach相对应,当Fragment与Activity关联被取消时调用。 以上就是Fragment的生命周期与Activity的生命周期之间的关系,接下来将讲解如何创建Fragment以及Fragment之间的通信。 视频讲解 5.3Fragment的创建 Fragment的创建与Activity的创建类似,要创建一个Fragment必须要创建一个类继承自Fragment。Android系统提供了两个Fragment类,分别是android.app.Fragment和android.support.v4.app.Fragment。继承前者只能兼容Android 4.0以上的系统,继承后者可以兼容更低的版本。接下来将具体讲解Fragment的创建过程。 (1) 创建新项目Chapter5_Fragment,在项目app的java下面的包中分别创建LeftFragment、RightFragment和SecondFragment,创建Fragment的方法如图53和图54所示。 图53选择Android提供的Fragment(Blank) 图54创建自定义的Fragment (2) Fragment创建时可以自动生成对应的布局文件。修改左侧碎片LeftFragment布局文件fragment_left.xml,代码如下: