1. Fragment生命周期
(1) 为什么被成为第五大组件:像activity一样具有自己的生命周期,可灵活地加载到activity中,比activity更节省内存。
(2) Fragment加载到Activity 中的两种的方式
注意
:fragment必须依赖于activity。即:fragmen生命周期依赖于activity的生命周期,如一个activity的onPause()的生命周期方法被调用的时候这个activity中的所有的fragment的onPause()方法也将被调用。
- 静态加载:fragment添加到activity布局中
- 动态加载(常用):在代码中通过FragmentManager来管理fragment。具体步骤为通过FragmentManager对象获得FragmentTransaction对象,之后通过它的API实现在activity运行时动态地add、replace或remove掉fragment
(3) Fragment 生命周期:
fragment生命周期.png
2. Fragment通信
(1) Activity与Fragment的通信(Activity调用Fragment中的方法):通过接口回调的方式实现在Activity调用Fragment中的方法。即在fragment中定义接口,在activity中来实现。
(2) Fragment与Activity的通信(Fragment调用Activity中的方法):Fragment中通过getActivity()方法获取到activity,之后便可调用activity中的方法。
(3) Fragment间的通信:.两个单独的Fragment之间是不能直接进行通信的,需使用他们所存在的Activity作为沟通的纽带。即:Fragment1通过getActivity()方法获取到Fragment2所依赖的activity,然后通过findFragmentById()方法获取到Fragment2,之后便可调用Fragment2中的方法。
3. FragmentPagerAdapter和FragmentStatePagerAdapter的区别
-
FragmentPagerAdapter:保存所有加入的fragment,虽然步长超过1的页面会调用destroyItem,但是在fragment的生命周期里,只有onDestroyView调用了,没有调用onDestory,也没有调用onDetach,所以fragment只是把上面的view销毁了,fragment并没有销毁,下次再创建的时候,只会调用onCreateView和onActivityCreated,所以FragmentPagerAdapter里
所有fragment都没有被销毁,虽然占用内存大,但是避免了频繁的销毁和创建
,适用于页面比较少
的情况。 -
FragmentStatePagerAdapter:对步长以内的fragment,跟FragmentPagerAdapter一样,不会调用任何销毁操作,再次显示也无需重新创建,对步长以外的fragment会调用destroyItem,跟FragmentPagerAdapter不一样,FragmentStatePagerAdapter里
所有fragment都会被真正销毁
(同时销毁view和fragment,调用onDestroyView以及其后面的所有销毁方法),重建时会从最初的onAttach开始一直到onActivityCreated,适用于页面比较多
的情况。
网友评论