最近经常用到Fragment,其中也遇到了好多问题。今天回过头来重新看一遍Fragment。
Fragment是Google在Android 3.0后推出的技术,随着手机、平板的快速更新,尺寸各不相同,为了提高代码的复用性,可以使用Fragment来封装UI和Java代码,来实现这一效果。
Fragment主要用到的场景有,逻辑共享,状态保存,回退导航和整体移动。
Fragment是不能单独工作的,它必须依托于Activity,Activity有着其生命周期,Fragment同样也具有生命周期。Fragment的生命周期比Activity的生命周期更复杂,两者生命周期的方法交替执行。
Fragment生命周期图如图所示
onAttach(Activity activity) Fragment与Activity关联后立即执行,Fragment.getActivity()获取窗口类对象。
onCreate(Bundle savedInstanceState) onAttach()执行后立即执行 ,可以保存Fragment的状态值。
onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) 加载布局,保存状态。
onViewCreated(View view,Bundle savedInstanceState) onCreateView()执行后立即执行,view 为上一个方法的view。执行完这个方法后就开始执行Activity.onCreate()方法。
onActivityCreated(Bundle savedInstanceState) Activity的onCreate()方法执行完后,立即执行。接着执行Activity.onStart()方法。
onStart() 执行完此方法,Fragment窗口已经可以显示,但是不能交互。接着执行Activity.onResume()方法。
onResume() 该方法执行完后,Fragment窗口就显示完毕了,可以交互。
当用户操作或者弹出其他窗口,当前活跃的Fragment就会变得不活跃。
onPause() 第一个要执行的方法,在该方法中执行需要临时暂停的工作,重新获取焦点后执行onResume()方法。 接着执行Activity.onPause()。
onStop() Fragment窗口从屏幕上消失,重新获取焦点执行onStart(),onResume()。 接着执行Activity.onStop()。
onDestoryView() 如果Fragment状态被保存,或者从回退栈中退出,调用此方法,View与Fragment分离。
onDestory() Fragment 不再使用。但仍和窗口关联,Fragment对象不能使用。
onDetach() Fragment所有的View对象和资源都被销毁。接着调用Activity.onDestory()。
下图为Activity和Fragment的关系