Fragment的生命周期
相关方法调用:
onAttach():当Fragment和Activity建立关联时调用
onCreateView():当Fragment创建视图时调用
onActivityCreated():当与Fragment相关联的Activity完成onCreate()之后调用
onDestroyView():在Fragment中的布局被移除时调用
onDetach():当Fragment和Activity解除关联时调用
Fragment生命周期与Activity生命周期的一个关键区别就在于,Fragment的生命周期方法是由托管Activity而不是操作系统调用的。Activity中生命周期方法都是protected,而Fragment都是public,也能印证这一点,因为Activity需要调用Fragment那些方法并管理它。
Fragment加载
Fragment的几个核心类
Fragment
: Fragment的基类 ,任何创建的Fragment都需要继承该类FragmentManager
:管理和维护Fragment。他是抽象类,具体的实现类是FragmentManagerlmplFragmentTransaction
: 对Fragment的添加、删除等操作都需要通过事务方式进行。他是抽象类,具体的实现类是BackStackRecord
扩展子类: .
- 对话框:
DialogFragment
- 列表:
ListFragment
- 选项设置:
PreferenceFragment
- WebView界面:
WebViewFragment
静态加载
1.首先在Layout中新建一个xml文件,作为一个fragment的布局文件
2.创建一个新的类去继承Fragment,并且将前面创建的布局文件加载进来。重写的是onCreateView方法:
3.在活动中将新建的fragment作为组件添加到活动的布局文件中:使用< fragment>标签添加碎片,并且一定要有android:name属性且值为被加载的Fragment类的包名.类名完整形式
4.活动中加载第三步新建的布局文件,将fragment添加到活动中,该fragment的控件也是主活动的控件,所以也可以直接在活动中使用。
动态加载
(1)(2)两步和静态加载雷同
(3)修改main布局文件
(4)首先获取一个新建的Fragment类的实例对象,然后获取一个FragmentManager的实例对象,最后通过它的beginTransaction()获取一个FragmentTransaction的实例;通过操作碎片事务的方法将碎片添加到布局文件,完成操作后进行提交。add()方法里的第一个参数是容器视图资源Id,容器视图资源Id有两个作用:告知FragmentManager,碎片视图应该出现在活动视图的什么地方;它也是FragmentManager队列中碎片的唯一标识符。而静态加载时碎片的唯一标识符正是在活动布局里< fragment>下的id。
Fragment和Activity的交互
静态加载加载碎片的方式:
MyFragment myFragment = (MyFragment)getFragmentManager(). findFragmentById(R.id.fragment);
动态加载加载碎片的方式:
MyFragment myFragment = (MyFragment)fragmentManager(). findFragmentById(R.id.layout);
碎片中加载活动的方式:
MainActivity activity=(MainActivity)getActivity();
Fragment和Activity的关系
Fragment的出现是为了解决Android碎片化,它可作为Activity界面的组成部分,可在Activity运行中实现动态地加入、移除和交换。
一个Activity中可同时出现多个Fragment,一个Fragment也可在多个Activity中使用。另外,Activity的FragmentManager负责调用队列中Fragment的生命周期方法,只要Fragment的状态与Activity的状态保持了同步,宿主Activity的FragmentManager便会继续调用其他生命周期方法以继续保持Fragment与Activity的状态一致。