Fragment面对手机配置信息更改问题

手机配置信息更改【如 屏幕方向,屏幕像素密度,屏幕尺寸,键盘类型,底座模式,以及语言等发生改变

会导致系统去寻找是否有最佳资源来适应新的配置信息,因此我们的activity会被销毁,然后再重建。

那么我activity里面已经加载好了的fragment包含了很对信息,不是也会随着activity销毁而销毁吗?

这里提供两个简单的方法来保证fragment不被销毁:

1)在fragment里加上 setRetaIninstance(true);

Fragment面对手机配置信息更改问题

调用setRetainInstance(true)方法可以保留fragment。已保留的fragment不会随activity一起销毁。相反,它会一直保留,并在需要时原封不动地转给新的activity。

2)对于一些类似的类(如videoview),Android文档推荐activity自己处理设备配置变更。也就是说,无需销毁重建activity,就能直接调整自己的视图以适应新的屏幕尺寸。为了让activity能自己处理设备配置调整,可在manifest配置文件中做如下调整:

Fragment面对手机配置信息更改问题

上面的android:configChanges属性表明,如果因键盘开或关,屏幕方向改变,屏幕大小改变而发生设备配置更改,那么activity应自己处理配置更改。