一、Fragment四种状态
1、运行状态
当一个Fragment是可见的,同时它所关联的Activity正处于运行状态,则该Fragment也处于运行状态。
2、暂停状态
当一个Activity处于暂停状态,与它关联的可见碎片就会处于暂停状态。
3、停止状态
Fragment不可见,有可能被系统回收。
1)当一个Activity处于停止状态,与它关联的可见碎片就会处于停止状态。
2)通过调用FragmentTransaction的remove()、replace()方法将Fragment从活动中移除,但如果在事务提交之前调用addToBackStack()方法,此时Fragment也会进入停止状态。
4、销毁状态
1)当一个Activity处于销毁状态,与它关联的可见碎片就会处于销毁状态。
2)通过调用FragmentTransaction的remove()、replace()方法将Fragment从活动中移除,但如果在事务提交之前并没有调用addToBackStack()方法,此时Fragment也会进入销毁状态。
二、Fragment的生命周期
onAttach():onAttach()回调将在Fragment与其Activity绑定关联之后调用。
onCreate():初始化Fragment
onCreateView():初始化Fragment的布局,加载布局和findViewById的操作通常在此函数内完成,不建议执行耗时的操作。
onActivityCreated():onActivityCreated()回调会在Activity完成其onCreate()回调之后调用。
onStart():Fragment变为可见状态。
onResume():执行该方法时,用户可与之交互
onPause():暂停,可见但不能交互
onSaveInstanceState():保存当前Fragment的状态
onStop():执行该方法时,Fragment完全不可见。
onDestroyView():销毁与Fragment有关的视图,但未与Activity解除绑定,依然可以通过onCreateView方法重新创建视图。通常在ViewPager+Fragment的方式下会调用此方法。
onDestroy():销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法。
onDetach():解除与Activity的绑定。在onDestroy方法之后调用。
在碎片中同样可以运用onSaveInstanceState()方法来保存数据,因为在进入停止状态的Fragment有可能在系统内存不足时被回收。保存下来的Bundle类型的数据saveInstanceState在onCreate()、onCreateView()与onActivityCreated()三个方法中使用。
三、动态加载布局的技巧
Android可以使用限定符让程序根据设备的分辨率或屏幕大小在运行时来决定加载哪一个布局。
1、layout文件夹中存在activity_main.xml布局,同时在res目录下建立layout-large文件夹,在该文件夹下新建另一个同名布局activity_main.xml。
2、其中large为一个限定符,那些屏幕被认为large的设备会自动加载layout-large文件夹下的布局,而小屏幕仍会加载layout文件夹下的activity_main.xml布局
Android中常见限定符:
最小宽度限定符:
允许对屏幕宽度指定一个最小值,以该最小值为临界点,屏幕宽度大于该值的设备加载一个布局,屏幕宽度小于该值的设备加载另一个布局。
例:在res目录下新建layout-sw600dp文件夹。