Fragment的生命周期,按照正常顺序来看依次是:
onAttach(),老式的方法是以Activity为参数,后来改成了context做参数。但是其实我实际项目中并没有重写这一方法,因为其父类方法就可以完成Activity和fragment的绑定(关联)。
onCreate(), 在这个方法里可以初始化一些数据,这些数据在onPause(),onStop()调用之后也能保持住不被销毁。另外隐藏状态栏这种操作也可以放在这里。要注意的是这个onCreate()只调用一遍,所以如果fragment没有被销毁并重新创建的话,一些指示当前fragment以方便Activity管理的flag参数就不要在这里设置。
onCreateView(), 如果设置了模拟返回栈,那么在onDestroyView()之后,fragment就会回到这里。这个地方主要是产生一个可以在上面画控件的layout,并返回一个view类实例。要注意的是不应该在这里画控件,可能会出错。当我把flag参数放在这里时,是可以正常工作的(也许是因为似然没有加进返回栈,但fragment都没有执行到onDestroy()那一步)。
onActivityCreated(), 这里就比较适合初始化控件。当fragment执行到这里的时候,对应的是Activity的onCreate()刚执行完成。
-----------------接下来几个方法和Activity中是一样的作用:---------------
onStart(), fragment可见。
onResume(), fragment可获取焦点(可以点击?)。如果要设置窗口(强制/感应)横屏或竖屏,代码可加在这里。
onPause(),fragment 失去焦点但仍可见,部分遮挡(比如出现dialog时吧)。
onStop(), fragment被完全遮挡。
---------------------------------------------------------------------------------------------
onDestroyView(), layout被移除,包括控件资源。比如在使用viewPager时,因为它的缓存机制总是同时保存三个fragment,当滑动到第四个页面时,第一个页面会执行onDestroyView(),但未执行onDestroy(), 所以它会仍然与Activity保持关联。这样在重新滑动到第一页时,它会直接执行onCreateView()。
onDestroy(), 与Activity中的一样,销毁。
onDetach(), fragment与Activity解除关联(都销毁了还有啥关联?)