Android Fragment
Fragment 概念
Fragment
表示应用界面中可重复的一部分,Fragment
定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件。fragment
不能独立存在,而是必须由 Activity
或另一个 fragment
托管。fragment
的视图层次结构会成为宿主的视图层次结构的一部分,或附加到宿主的视图层次结构。
Fragment 生命周期
- 运行状态:当一个
Fragment
所关联的Activity
正处于运行状态时,该Fragment
也处于运行状态。 - 暂停状态:当一个
Activity
进入暂停状态时(由于另一个未占满屏幕的Activity
被添加到了栈顶),与它相关联的Fragment
就会进入暂停状态。 - 停止状态:当一个
Activity
进入停止状态时,与它相关联的Fragment
就会进入停止状态,或者通过调用FragmentTransaction
的remove()
、replace()
方法将Fragment
从Activity
中移除,但在事务提交之前调用了addToBackStack()
方法,这时的Fragment
也会进入停止状态。总的来说,进入停止状态的Fragment
对用户来说是完全不可见的,有可能会被系统回收。 - 销毁状态:
Fragment
总是依附于Activity
而存在,因此当Activity
被销毁时,与它相关联的Fragment
就会进入销毁状态。或者通过调用FragmentTransaction
的remove()
、replace()
方法将Fragment
从Activity
中移除,但在事务提交之前并没有调用addToBackStack()
方法,这时的Fragment
也会进入销毁状态。
Activity
中有的回调方法在 Fragmen
中基本都有,Fragment
还提供了附加的回调方法。
onAttach()
:当Fragment
和Activity
建立关联时调用。onCreateView()
:为Fragment
创建视图(加载布局)时调用。onActivityCreated()
:确保与Fragment
相关联的Activity
已经创建完毕时调用。onDestroyView()
:当与Fragment
关联的视图被移除时调用。onDetach()
:当Fragment
和Activity
解除关联时调用。
常见的 Fragment
生命周期变化有以下几种:
- 当
Fragment A
第一次被加载到屏幕上:onAttach()
、onCreate()
、onCreateView()
、onActivityCreated()
、onStart()
和onResume()
会依次执行。 - 当
Fragment A
被Fragment B
替代,Fragment A
的变化情况:onPause()
、onStop()
和onDestroyView()
方法会得到执行,如果没有调用addToBackStack()
方法,会进入销毁状态,onDestroy()
和onDetach()
方法就会得到执行。 - 当上述情况改为在
Fragment A
没有被销毁的时按下BACK
,让Fragment A
重新回到屏幕:onCreateView()
、onActivityCreated()
、onStart()
和onResume()
会依次执行。 - 退出程序时:
onPause()
、onStop()
、onDestroyView()
、onDestroy()
和onDetach()
方法会依次执行。