一:什么是Fragment
如字面意思,Fragment是碎片,片段。其目的是解决不同屏幕分辨率的动态和灵活ui设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments。
fragment在活动activity中为不同屏幕的尺寸修改布局设置(小屏幕可能只显示一个fragment,大屏幕会显示几个fragment)
Fragments必须写成可重用的模块,因为fragment有自己的layout,自己进行时间响应,拥有自己的生命周期和行为,所以你可以在多个fragment中包含一个fragment的不同实例, 这对于让你的界面在不同的屏幕尺寸下都能给用户完美的体验尤其重要。
二: 优点
1.Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。
2.Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。
3.Fragment是一个独立的模块,紧紧地与activity绑定在一起。可以运行中动态地移除、加入、交换等。
4.Fragment提供一个新的方式让你在不同的安卓设备上统一你的UI。
5.Fragment 切换流畅,轻量切换。
6.Fragment 替代TabActivity做导航,性能更好。
7.Fragment做局部内容更新更方便,原来为了到达这一点要把多个布局放到一个activity里面,现在可以用多Fragment来代替,只有在需要的时候才加载Fragment,提高性能。
可以从startActivityForResult中接收到返回结果,但是View不能。
生命周期
你可以把fragment看作是activity的模块化组件,它拥有自己的生命周期。
Fragment是activity的界面中的一部分或者是一种行为,你可以把多个activity中组合到一个activity中来创建一个多界面并且你可以在多个activity中重用一个fragment,你可以把Fragment认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除。
Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,它拥有的所有的Fragment们都暂停了,当activity销毁时,它拥有的所有Fragment们都被销毁。然而,当activity运行时(在onResume()之后,onPause()之前),你可以单独地操作每个Fragment,比如添加或删除它们。当你在执行上述针对Fragment的事务时,你可以将事务添加到一个栈中,这个栈被activity管理,栈中的每一条都是一个Fragment的一次事务。有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。
- 当一个fragment被创建的时候,它会经历以下状态.
onAttach()
onCreate()
onCreateView()
onActivityCreated()
2. 当这个fragment对用户可见的时候,它会经历以下状态。
onStart()
onResume()
3. 当这个fragment进入“后台模式”的时候,它会经历以下状态。
onPause()
onStop()
4. 当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态。
onPause()
onStop()
onDestroyView()
onDestroy() // 本来漏掉类这个回调,感谢xiangxue336提出。
onDetach()
5. 就像activitie一样,在以下的状态中,可以使用Bundle对象保存一个fragment的对象。
onCreate()
onCreateView()
onActivityCreated()
6. fragments的大部分状态都和activitie很相似,但fragment有一些新的状态。
onAttached() —— 当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。
onCreateView() —— 当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。
onActivityCreated() —— 当activity的onCreated()方法返回后调用此方法
onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。
onDetach() —— 当fragment和activity分离的时候,调用这个方法。
一旦activity进入resumed状态(也就是running状态),你就可以自由地添加和删除fragment了。因此,只有当activity在resumed状态时,fragment的生命周期才能独立的运转,其它时候是依赖于activity的生命周期变化的。
显示Fragment时(跟用户交互)要调用的核心的生命周期方法如下:
-
把Fragment对象跟Activity关联时,调用onAttach(Activity)方法;
-
Fragment对象的初始创建时,调用onCreate(Bundle)方法;
-
onCreateView(LayoutInflater, ViewGroup, Bundle)方法用于创建和返回跟Fragment关联的View对象;
-
onActivityCreate(Bundle)方法会告诉Fragment对象,它所依附的Activity对象已经完成了Activity.onCreate()方法的执行;
-
onStart()方法会让Fragment对象显示给用户(在包含该Fragment对象的Activity被启动后);
-
onResume()会让Fragment对象跟用户交互(在包含该Fragment对象的Activity被启恢复后)。

















