Fragment
FragmentActivity是Activity的子类,具有新版本Activity类管理fragment的能力,即便是在较早版本的Android设备上也可对fragment进行管理。
为托管UI fragment,Activity必须做到
1.在布局中为fragment的视图安排位置;
2.管理fragment实例的生命周期。
Fragment生命周期
缺图,后面补上。
注:Activity生命周期方法由OS调用,fragment生命周期由托管的Activity调用。
Activity托管UI fragment的两种方式:
1.添加fragment到Activity布局XML文件中;
2.在Activity代码添加fragment。
第一种方式简单却不够灵活。添加fragment到Activity布局中,就等于将fragment及其视图绑定到Activity的视图,布局的复杂程度会增加,而且在Activity的生命周期中,无法切换fragment视图。
第二种方式比较复杂但却是唯一一种可以在运行时控制fragment的方式。(为了UI的灵活性,通常使用这种做法)采用第二种方式也需要在Activity布局中使用FrameLayout给fragment安排位置,FrameLayout是一个通用性视图,可以托管多个fragment。
注意:
1.Fragment.onCreate()是public,而Activity.onCreate()是protected。因为需要被托管的fragment的任何Activity调用,因此Fragment的生命周期方法都被设计为public;
2.类似于Activity,Fragment也有onSaveInstanceState()来保存和获取状态的bundle;
3.在Fragment.onCreate()中虽然配置了fragment实例但是没有生成视图;创建和配置视图是在onCreateView()里面实现的,将生成的View返回给托管的Activity。
添加UI fragment到FragmentManager,FragmentManager具体管理:
1.fragment队列(调用队列中fragment的生命周期方法);
2.fragment事物的回退栈。
注意:因为使用了support库和FragmentActivity(为了兼容之前不支持Fragment的系统版本),FragmentManager的创建通过调用getSupportFragmentManager();不考虑兼容的话,直接继承Activity,调用getFragmentManager()即可。
Fragment事务
Fragment事务被用来添加、移除、附加、分离或替换Fragment队列中的fragment。
FragmentTransaction实例由FragmentManager.beginTransacion()创建并返回。
1.创建事务实例;
2.调用添加、移除、附加、分离或替换的方法;
3.commit()提交事务。