转自《第一行代码》
碎片(Fragment)是一种可以嵌入在活动当中的UI 片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛。
新建类继承Fragment,会有两个不同的包供选择,一个是系统内置的android.app.Fragment,一个是support-v4库中的android.support.v4.app.Fragment。建议选support-v4库中的Fragment,可以让在所有Android系统版本中保持功能一致性。并且不需要加入support-v4库的依赖,因为build.gradle文件中已经添加了appcompat-v7库的依赖。
使用name属性来显示指明要添加的碎片类名。
动态添加碎片
在碎片中模拟返回栈
FragmentTransaction中提供了一个addToBackStack()方法,可以用于将一个食物添加到返回栈中。
碎片的生命周期
每个活动在其生命周期内可能会有运行状态、暂停状态、停止状态和销毁状态这四种。类似地,每个碎片在其生命周期内也可能会经历这几种状态,只不过在一些细小的地方会有部分区别。
1. 运行状态
当一个碎片是可见的,并且它所关联的活动正处于运行状态时,该碎片也处于运行状态。
2. 暂停状态
当一个活动进入暂停状态时(由于另一个未占满屏幕的活动被添加到了栈顶),与它相关联的可见碎片就会进入到暂停状态。
3. 停止状态
当一个活动进入停止状态时,与它相关联的碎片就会进入到停止状态。或者通过调用FragmentTransaction 的remove()、replace()方法将碎片从活动中移除,但有在事务提交之前调用addToBackStack()方法,这时的碎片也会进入到停止状态。总的来说,进入停止状态的碎片对用户来说是完全不可见的,有可能会被系统回收。
4. 销毁状态
碎片总是依附于活动而存在的,因此当活动被销毁时,与它相关联的碎片就会进入到销毁状态。或者通过调用FragmentTransaction 的remove()、replace()方法将碎片从活动中移除,但在事务提交之前并没有调用addToBackStack()方法,这时的碎片也会进入到销毁状态。
Fragment 类中也提供了一系列的回调方法,以覆盖碎片生命周期的每个环节。其中,活动中有的回调方法,碎片中几乎都有,不过碎片还提供了一些附加的回调方法,那我们就重点来看下这几个回调。
onAttach()。当碎片和活动建立关联的时候调用。
onCreateView()。为碎片创建视图(加载布局)时调用。
onActivityCreated()。确保与碎片相关联的活动一定已经创建完毕的时候调用。
onDestroyView()。当与碎片关联的视图被移除的时候调用。
onDetach()。当碎片和活动解除关联的时候调用。
动态加载布局的技巧
1。使用限定符(Qualifiers)
2.使用最小宽度限定符
有的时候我们希望可以更加灵活地为不同设备加载布局, 不管它们是不是被系统认定为“ large ”, 这时就可以使用最小宽度限定符(Smallest-width Qualifier)了。最小宽度限定符允许我们对屏幕的宽度指定一个最小指(以dp 为单位),然后以这个最小值为临界点,屏幕宽度大于这个值的设备就加载一个布局,屏幕宽度小于这个值的设备就加载另一个布局。