Fragment页面重叠

今天坑死我了一个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就好了**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值