1.在碎片中模拟返回栈
如果单纯的动态添加碎片,当按下back键就会直接退出。模拟返回栈的效果就是按下back键让他返回上一个碎片。
为了实现这个功能,只要在上一个动态添加碎片的步骤中,在事务中添加addToBackStack(null),即可。这个null可以传一个string类型的名字,用于描述返回栈的状态。
2.碎片和活动之间进行通信:
1) FragmentManager提供了一个类似于findViewById的方法,可以在活动中得到相应碎片的实例,这样就可以在活动中轻松的调用碎片里的方法了。
2) 同样的在碎片中提供了getActivity()方法,可以轻松的活动活动的实例,并且如果碎片需要使用一个Context对象时,也可以直接使用getActivity()方法,因为活动本身就是一个Context。
3) 最后就是碎片与碎片直接的通信,这个时候就需要使用它们相关联的活动做一个桥梁。来在一个碎片中获取到另一个碎片的实例。
3.碎片的状态和回调:
a) 运行状态:当一个碎片是可见的,并且和它关联的活动处于运行状态是,该碎片就是也处于运行状态。
b) 暂停状态:当一个活动进入暂停状态时,和它相关联的可见碎片就会进入到暂停状态。
c) 停止状态:通俗理解就是停止状态的碎片完全不可见。
d) 销毁状态:活动进入销毁状态,依附于他的碎片也会被销毁。还有就是如果通过调用FragmentTransation的remove()、replace()方法将碎片从活动中移除,但在事务提交之前并没有调用addToBackStack()方法的话,碎片也会进入到销毁状态。
e) 碎片特有的几个回调方法;
i. onAttach():当碎片和活动建立关联的时候调用
ii. onCreateView():为碎片创建视图(加载布局)调用
iii. onActivityCreated():确保与碎片关联的活动一定已经创建完毕的时候调用。
iv. onDestoryView():当与碎片关联的视图被移除的时候调用
v. onDetach():当碎片和活动解除关联的时候调用。
4.在碎片中也可以利用onSaveInstanceState()方法保存数据。因为进入停止状态的碎片有可能在内存不足的时候被回收。保存的数据在oncreate、oncreateview、onactivitycreated中都可以拿到。
5.安卓动态加载布局的技巧:(动态根据屏幕大小加载布局)
a) 使用限定符:(例如:layout-large:大屏幕的设备会使用这个文件夹下的布局)在不同的布局文件夹下放置不同的布局文件。
屏幕特征 | 限定符 | 描述 |
大小 | small | 提供给小屏幕设备使用的资源 |
normal | 提供给中等屏幕 | |
large | 提供给大屏幕 | |
xlarge | 提供给超大屏幕 | |
分辨率 | ldpi | 低分辨率:120dpi以下 |
mdpi | 中等分辨率:120~160 | |
hdpi | 高分辨率:160~240 | |
xhdpi | 240到320 | |
方向 | land | 横屏设备 |
port | 竖屏设备 |
b) 使用最小宽度限定符:(例如:layout-sw600dp:表示屏幕宽度600dp以上才会用这个文件夹下面的布局)3.2版本以上才支持。