一、Fragment的设计哲学
Android在3.0中引入了fragments的概念,主要目的是用在大屏幕设备上——例如平板电脑上,支持更加动态和灵活的UI设计。平板电脑的屏幕比手机的大得多,有更多的空间来放更多的UI组件,并且这些组件之间会产生更多的交互。
针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。
下图是文档中给出的一个Fragment分别对应手机与平板间不同情况的处理图:
PS:简单的新闻浏览页面,使用两个Fragment分别显示新闻列表与新闻内容;
Fragment在应用中应当是一个模块化和可重用的组件,因为Fragment定义了他自己的布局,以及通过使用他自己的生命周期回调方法定义了他自己的行为,可以将Fragment包含到多个Activity中。
二、静态加载Fragment
Fragment知识概要:
-
- Fragment 可以作为Activity界面的一部分组成出现(不能单独使用)
- 可以在一个Activity中同时出现多个fragment,并且一个fragment也可以在多个activity中使用
- 在activity运行过程中,可以添加、一处或替换fragment
- fragment可以响应自己的输入事件,并且有自己的生命周期,他们的生命周期会受宿主activity的生命周期影响,比如Activity被destory销毁了,他也会跟着销毁
onCreateView()方法
Fragment第一次绘制它的用户界面的时候,系统会调用此方法,未来绘制Fragment的UI,此方法必须返回一个View,如果不显示UI,返回NULL即可。
在activity的layout文件中声明Fragment,需要特别注意的是<fragment>中的android: name 属性指定了在layout中实例化的Fragment类
标识Fragment的方法:
android:id 属性提供一个唯一的ID
android:tag 属性提供一个唯一字符串
1、fragment布局文件,显示fragment显示内容控件
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:andro 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <TextView 8 android: 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content" 11 ></TextView> 12 13 <Button 14 android: 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" 17 18 /> 19 </LinearLayout>