什么是Fragment?
Fragment是在Android 3.0之后被引入的,为了跨分辨率的问题,词如其名,即通过管理分块(碎片)Fragment,更灵活地布局,能在手机、TV、平板上实现一套代码,多种样式的需求。Fragment的名词定义也是碎片、片段的意思。
Fragment可以写成可重用的模块,因为它有自己的layout,自己的响应事件,几乎与activity完全相同。从模块化角度去思考,activity是一个APP模块化不同界面的载体,而Fragment也是activity再模块化的一个体现。可以实现界面的重用,布局的灵活切换。对于不同的业务起到良好的扩展,也有利于性能的提升(因为不用一次性加载所有布局,虽然他们会设置GONE或VISIBLE,但是还是要被绘制出来的呀~)。
使用之前,你需要知道
首先需要注意,Fragment是在3.0版本引入的,如果你使用的是3.0之前的系统,需要先导入android-support-v4的jar包才能使用Fragment功能。android.support.v4.app.Fragment:可以兼容到1.6的版本。
关于这两个fragment使用标签的问题
(1)app.fragment和v4.fragment都是可以使用< fragment >标签的
只是在使用的时候,如果是app.fragment则没有什么特殊的地方,这个Activity继承Activity即可。
(2)当v4.fragment使用< fragment >标签的时候就要特别注意了:
当这个Activity的布局中有< fragment >标签的时候,这个Activity必须继承FragmentActivity。
(3)app包中关于Fragment的类和方法在V4包中都是有对应的。
getFragmentManager()和getSupportFragmentManager()区别
当api>=14时,使用getFragmentManager(),有时候使用Fragment的时候为了兼容低版本,
会引入Android-support-v4.jar支持包,这个时候,需要使用getSupportFragmentManager()。
Fragment生命周期
先附上一幅图,供君赏阅~
图上显示的是activity与fragment生命周期的关系,对activity的某个生命周期方法的调用也会产生对fragment相同方法的调用。
fragment比activity多的几个方法是为了与activity交互而设立的。如下:
onAttach()
当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。
onCreateView()
当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。
onActivityCreated()
当activity的onCreated()方法返回后调用此方法。
onDestroyView()
当fragment的layout被销毁时被调用。
onDetach()
当fragment被从activity中删掉时被调用。
一旦activity进入resumed状态(也就是running状态),你就可以自由地添加和删除fragment了。因此,只有当activity在resumed状态时,fragment的生命周期才能独立的运转,其它时候是依赖于activity的生命周期变化的。
同样类似于activity,你可以把fragment的状态保存在一个Bundle中,在activity被recreated时就需用到这个东西。你可以在onSaveInstanceState()方法中保存状态并在onCreate()或onCreateView()或onActivityCreated()中恢复,关于更多的保存状态的信息,请参考Activity章节。