fragment是一种控制器对象,avtivity可以委派他完成一些任务。一般这些任务就是管理用户界面,它也有自己产生布局文件的视图。受管理的用户界面可以是一整屏或者是屏幕的一部分。根据应用和用户的需求,可联合使用fragment和activity来组装或者重新组装用户界面,在整个生命周期的过程中,技术上来说activity的视图可以保持不变。
fragment本身不具有在屏幕上显示视图的能力。只有将它的视图放在activity的视图层级结构中,fragment视图才能显示在屏幕上。因此fragment是与activity密切相关的。fragment的生命周期总是与activity的生命周期保持一致。
fragment被引入到API11级中。对于API11级之前的版本,我们需要使用Android支持库中的fragment类。(android.support.v4.app.Fragment)。但要想使用支持库中的fragment类。我们还必须做到以下两点:
1,你的activity必须继承于android.support.v4.app.FragmentActivity。
2,你必须通过调用getSupportFragmentManager()方法来获取FragmentManager。
Fragment的生命周期:
以下是不同的生命周期的方法:
onAttach(Activity):当一个fragment与activity进行结合的时候调用。
onCreate(Bundle):当初始化Fragment的时候被调用。
onCreateView(LayoutInfalter,ViewGroup,Bundle):创建并且返回Fragment所对应的视图对象。
onActivityCreated(Bundle):告诉Fragment托管的activity已经完成了activity的onCreate(Bundle)方法。
onStart():使fragment对用户可见。
onResume():使Fragment可以与用户进行交互。
onPause():fragment对用户可见,但不能与用户进行交互。
onStop():fragment对用户不可见。
onDestroyView():允许Fragment清理它的视图资源.
onDestroy():被调用用来做最后Fragment状态的一些清理。
onDetach():在Fragment与托管它的Activity分离前迅速被调用。
fragment的生命周期方法都是public修饰,而activity的生命周期方法是由protected修饰的。因为frgament需要被托管她的任何activity调用,因此必须设置成公共方法。
fragment的生命周期类似于activity的生命周期。fragment的生命周期的方法非常重要。因为fragment代表activity在工作,它的状态也反映了activity的状态。fragment的生命周期与activity的生命周期一个明显的区别就是Fragment的生命周期方法是由托管它的activitiy调用而不是操作系统调用的。操作系统无法知道acativity用来管理视图的fragment。在activity中托管一个Fragment,有两种方式:
1,添加fragment到activity布局中。
2,在activity代码中添加fragment。
添加fragment到activity布局中:
这种方式简单但灵活性不够。添加fragment到activity的布局中,就等同于将fragment及其视图绑定在了一起,且在activity的生命周期过程中,无法切换fragment视图。
在activity代码中添加fragment:
这种方式比较复杂,但也是唯一一种可以再运行时控制fragment的方式。我们可以决定合适将fragment添加到activity中,也可以随时添加,移出,替换fragment。
FragmentManager fm = getSupportFragmentManager();//获取FragmentManager
Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);
if(fragment == null){
fragment = new createFragment();
fm.beginTransaction()//开启fragment事务
.add(R.id.fragmentContainer,fragment)//增加fragment到指定的容器
.commit();//提交事务
}
Fragment被引入到API11以后,为协同工作,Acitivity类被更改为含有FragmentManager的类。FragmentManager具体管理的是:
1,fragment队列
2,fragment事物的回退栈。