在开发中,我们会经常遇到fragment的重叠问题,那么fragment重叠的原因是什么呢?
形成原因:
当系统内存不足,Fragment 的宿主 Activity 回收的时候,Fragment 的实例并没有随之被回收。
Activity 被系统回收时,会主动调用 onSaveInstance() 方法来保存视图层(View Hierarchy),所以当 Activity 再次被重建时,
之前被实例化过的 Fragment 依然会出现在 Activity 中,此时的 FragmentTransaction 中的相当于又再次 add 了 fragment 进去的,
hide()和show()方法对之前保存的fragment已经失效了,所以就出现了重叠。
bug重现:
在Android Studio原代码中不影响在整体代码逻辑的情况下稍微改动代码,比如加个无关紧要的注释,重新部署app。这样就会重现
叠加的bug。
解决办法:
@Override public void onAttachFragment(Fragment fragment) { //super.onAttachFragment(fragment); if(homeFragment == null && fragment instanceof HomeFragment){ homeFragment = fragment; } if(cartFragment == null && fragment instanceof CartFragment){ cartFragment = fragment; } if(myFragment == null && fragment instanceof MyFragment){ myFragment = fragment; } }
在activity中重写以上方法。