MVVM框架下的ViewModel天生就是为横竖屏切换而生,在不添加android:configChanges="orientation|keyboardHidden|screenSize"到AndroidManifest中的activity下的情况下,在横竖屏切换时Activity会销毁重建,Fragment也会销毁重建。
在单Activity+多fragment架构下,横竖屏切换的时候fragment不但操作的数据保存不方便,而且还可能出现Fragment重复创建的问题。
解决方案:
在fragment的 onCreate()方法中使用setRetainInstance(true);
这样子fragment就不会被真正销毁,即不会走onDestroy,不会走onCreate,并且发现fragment实例跟之前创建的是同一个。
但是此时在Activity重建时由于会执行Activity初始化的生命周期,即涉及到创建activity 的根fragment逻辑,故会出现重复创建了跟fragment的问题。
在Activity创建跟Fragment前判断根fragment是否已存在,存在则不要重复创建。
综上解决方案是:
步骤1.在fragment的 onCreate()方法中使用setRetainInstance(true);
步骤2.在Activity创建跟Fragment前判断根fragment是否已存在,存在则不要重复创建。