生命周期
-
onAttach:
onAttach()在fragment与Activity关联之后调用。初始化fragment参数可以从getArguments()获得,但当Fragment附加到Activity之后,就无法再调用setArguments(),这点和构造方法很类似
-
onCreate:
fragment初次创建时调用。类似Activity的OnCreate()函数,此时Activity还没有创建完成。如果想要获得Activity的资源,必须在onActivityCreated中获取。
-
onCreateView:
在这个fragment构造布局时调用,一般这时候绑定xml文件渲染view。
-
onActivityCreated:
在Activity的OnCreate()结束后调用此方法。在这个函数中才可以调用Activity的资源。
-
onStart:
此时Fragment对用户就是可见的了。但用户还未开始与Fragment交互。Fragment的OnStart()过与Activity的OnStart()是绑定的。
-
onResume:
当这个fragment对用户可见并且正在运行时调用。这是Fragment创建过程最后一个生命周期。Fragment的OnResume与Activity的OnResume是相互绑定的,意义是一样的。它依赖于包含它的activity的Activity.onResume。
-
onPause:
此回调与Activity的OnPause()相绑定,fragment对用户不可见的时候调用。
-
onStop:
与Activity的OnStop()相绑定,意义一样。已停止的Fragment可以直接返回到OnStart()回调,然后调用OnResume()。
-
onDestroyView:
如果Fragment即将被结束或保存,下一个回调将是onDestoryView()。会将onCreateView创建的视图与这个fragment分离。该fragment若要重新显示,将会创建新视图。该方法调用与onCreateView是否返回非null视图无关。它会潜在的在这个视图状态被保存之后以及它被它的父视图回收之前调用。
-
onDestroy:
当这个fragment不再使用时调用。需要注意的是,它即使经过了onDestroy()阶段,但仍然能从Activity中找到,因为它还没有Detach。
-
onDetach:
最后一个回调是onDetach()。调用它以后,Fragment就不再与Activity相绑定,它也不再拥有视图层次结构,它的所有资源都将被释放。
静态加载和动态加载:
静态加载:适用于单页面无需管理切换等fragment状态,例如某个页面切割成不同模块分别处理业务。
动态加载:常用于改变需要改变状态的页面,例如带有bottomNavgation的页面等。
-
静态加载
-
动态加载
Activity和Fragment数据交互
-
组件获取
Activity获取Fragment的控件:getFragmentManager.findFragmentById(R.id.xxx)
Fragment获取Activity的控件:getActivity().findViewById(R.id.xxx)
-
数据交互
Activity传递给Fragment:
1、eventbus(不建议)
2、接口回调
3、fragment里面写方法,activity调用
4、fragment的构造方法传参(只能初始化用一次)
5、activity跳转时setArgument(Bundle)传递
Fragment传递参数给Activity:
1、eventbus(不建议)
2、接口回调
3、activity里面写方法,fragment调用
Fragment与Fragment之间的数据互传
1、eventbus(不建议)
2、接口回调
3、fragment里面写方法,另一个fragment调用
4、创建时:找到接受数据的fragment对象,直接调用setArguments传数据
6、实时传递:就是以Activity为媒介,需要先在Activity获得f1传过来的数据, 再传到f2了
Fragment管理和事务
Fragment加载 详细见
-
FragmentManager管理Fragment的加载(add)、替换(replace)、删除(remove)等操作,此时的Fragment所在的容器一般选择用FrameLayout。
-
使用ViewPager等容器去装载Fragment列表并通过他们自己的页面切换能力去切换Fragment。