今天坑死我了一个fragment重叠问题,搞了一天下面说一下原因和解决方法
原因:
因为每当我们离开Activity的时候,切换到后台的时候,当内存不够用,Fragment所在Activity被销毁,会调用onSaveInstanceState()方法,Fragment都会被保存起来,当我再次回到这个app的时候,通过onCreate中的参数savedInstanceState恢复了之前的fragment,但是只是保存了数据,Fragment的show状态并没有被保存起来,就导致了界面重叠。
解决方案1:
在fragmentActivity里oncreate方法判断savedInstanceState==null才生成新Fragment,否则不做处理。
解决方案2:
在fragmentActivity里重写onSaveInstanceState方法,但不做实现,也就是将super.onSaveInstanceState(outState)注释掉。 这样你Activity销毁了你也不用保存我Fragment的状态了。
解决方案3:
if(savedInstanceState!=null){
FragmentManager manager = getSupportFragmentManager();
manager.popBackStackImmediate(null, 1);
}
判断savedInstanceState不等以null就弹出所有Fragment 全部重新加载
PS:
官方在Support 24.0.0及以上版本已经修复了上篇源码分析的引起重叠的BUG; 所以如果你使用了24.0.0以上的版本,在正常情况下,就不用再考虑重叠的问题了! ——并没有什么用起码我是这样的
还有一个小问题也是网上看的:不知道是真还是假,希望本文对你有所帮助
**在fragment切换的时候,源fragment布局中如果根布局是SwipeRefreshLayout
里面嵌套一个LinearLayout,时候,发现切换后的fragment布局中重叠了源fragment的布局,这个时候,我把LinearLayout放在最外层,里面嵌套一个SwipeRefreshLayout就好了**