三. 碎片的生命周期
1. 运行状态
当一个碎片是可见的,并且它所关联的活动正处于运行状态时,该碎片也处于运行状态。
2. 暂停状态
当一个活动进入暂停状态时。与它相关联的可见碎片就会进入到暂停状态。
3. 停止状态
当一个活动进入停止状态时,与它相关联的碎片就会进入到停止状态。或者通过调用 FragmentTransaction 的remove()
、replace()
方法将碎片从活动中移除,但有在事务提交之前调用 addToBackStack()
方法,这时的碎片也会进入到停止状态。
4. 销毁状态
碎片总是依附于活动而存在的,因此活动被销毁时,与它相关联的碎片就会进入到销毁状态。或者通过调用 FragmentTransaction 的remove()
、replace()
方法将碎片从活动中移除,但有在事务提交之前没有调用 addToBackStack()
方法,这时的碎片也会进入到销毁状态。
5. 回调方法
活动中有的回调方法,碎片中都有,碎片还提供了一些附加的回调方法:
- onAttach()
活动和碎片建立关联 - onCreateView()
为碎片创建视图 - onActivityCreated()
当与碎片关联的活动已经创建完毕的时候调用 - onDestroyView()
移除与碎片关联的视图 - onDetach()
活动和碎片解除关联
onAttach()//当一个Fragment对象关联到一个Activity时调用。
onCreate()//初始创建Fragment对象时调用。
onCreateView()//创建与Fragment对象关联的View视图时调用。
onActivityCreated()//当Activity对象完成自己的onCreate方法时调用。
onStart()//Fragment对象在UI可见时调用。
onResume()//Fragment对象的UI可以与用户交互时调用。
onPause()//Fragment对象可见,但不可交互。有Activity对象转为onPause状态时调用。
onStop()//有空间完全遮挡;或者宿主Activity对象转为onStop状态时调用。
onDestroyView()//Fragment对象清理view资源时调用,也就是移除Fragment中的视图。
onDestroy()//Fragment对象完成对象清理View资源时调用。
onDetach()//Fragment对象没有与Activity对象关联时调用。
当一个 Fragment 被创建的时候执行 1-4;
当这个 Fragment 创建完毕,到对用户可见的时候,执行 5-6;
当这个 Fragment 从可见到不可见时,执行 7-9;
当这个 Fragment 重新回到运行状态,执行 4-6。注意此时如果借助了addToBackStack()
方法使得 Fragment 和它的视图并没有销毁,那么 2、3 并不会执行。
当这个 Fragment 被销毁了(或者持有它的 Activity 被销毁了),执行 10-11;
另外在碎片中也是可以通过onSaveInstanceState()
方法来保存数据的,保存下来的数据在 2、3、4 这三个方法中可以重新得到,它们都含有一个 Bundle 类型的 savedInstanceState 参数。
四. 限定符 Qualifiers
如何在运行时判断程序应该使用双页模式还是单页模式?
layout/activity_main.xml 与
layout-large/activity_main.xml,其中 large 就是一个限定符,那些屏幕被认为是 large 的设备就会自动加载 layout-large 文件夹下的布局。
最小宽度限定符 Smallest-width Qualifier:
layout-sw600dp/activity_main.xml,当程序运行在屏幕宽度大于 600dp 的设备上时,会自动加载该布局。