Fragment具有属性retainInstance,默认值为false。
当设备旋转时,fragment会随托管activity一起销毁并重建。
调用setRetainInstance(true)方法可保留fragment,示例代码如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
...........
}
已保留的fragment不会随着activity一起被销毁;
相反,它会一直保留(进程不消亡的前提下),并在需要时原封不动地传递给新的Activity。
保留Fragment的原理是:
当设备配置发生变化时,FragmentManager首先销毁队列中fragment的视图(因为可能有更合适的匹配资源);
紧接着,FragmentManager将检查每个fragment的retainInstance属性值。
如果retainInstance属性值为false,FragmentManager会立即销毁该fragment实例。
随后,为适应新的设备配