原因如下:

容器的activity被系统GC,导致activity的所有生命周期重新被调用,两个fragment便会重叠出错。

原因是当activity被意外回收时会调用onSaveInstanceState()保持自身的一些状态和信息,以备在onCreate()方法中能够直接获取而不需要重新创建。

fragment的实例也会在onSaveInstanceState()中进行保存,所以在onCreate()方法中等于创建了两个Fragment的实例,当我控制一个fragment隐藏时,假设这个fragment的名字叫aFragment,由于现在activity实际上有两个aFragment,而我只隐藏了一个所以会导致fragment重叠。

解决方案如下:

控制activity的onCreate()方法让其只创建一次Fragment。

@Override protected void onCreate(@Nullable Bundle savedInstanceState) {

// 在页面重启时,Fragment会被保存恢复,而此时再加载Fragment会重复加载,导致重叠 ;

if(saveInstanceState == null){ // 或者 if(findFragmentByTag(mFragmentTag) == null)

// 正常情况下去 加载根Fragment } }

判断savedInstanceState是否为空可以知道这是第一次创建还是GC之后再次调用的onCreate(),

只在第一次onCreate()时创建aFragmen的实例,就可以避免重叠的问题。

还有一个办法就是重写activity的onSaveInstanceState()方法,

去掉其中保存fragment的代码,缺点是当页面比较复杂时,

saveInstance除了保存fragment的状态还保存了所有view的状态,

必须将view的状态保存写一遍,所以推荐使用第一种方法。

Android Fragment遇到重叠问题的解决方案相关推荐

  1. [转]Android fragment 重叠问题——通过hide,show方式导致的解决方法

    [转]Android fragment 重叠问题--通过hide,show方式导致的解决方法 参考文章: (1)[转]Android fragment 重叠问题--通过hide,show方式导致的解决 ...

  2. Android Fragment嵌套导致的bug

    原文链接 Android 多个Fragment嵌套导致的三大BUG Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误 http ...

  3. Android Fragment应用实战

    现在Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决Android Pad屏幕比较大,空间不能充分利用的问题,但现在即使只是在手机上, ...

  4. android 关于google刘海屏的解决方案

    转载请标明出处: https://blog.csdn.net/DJY1992/article/details/80689308 本文出自:[奥特曼超人的博客] 推荐: android 兼容所有刘海屏的 ...

  5. Android Fragment 基本介绍

    Android Fragment 基本介绍 Android Fragment 基本介绍 Fragment Android是在Android 3.0 (API level 11)开始引入Fragment ...

  6. android Fragment 学习资料推荐

    为什么80%的码农都做不了架构师?>>>    android   Fragment 学习资料推荐:android大神 郭霖 http://blog.csdn.net/guolin_ ...

  7. 【转】基于Android Fragment功能的例子

    原文网址:http://blog.csdn.net/eyu8874521/article/details/8252216 通过最近空闲时候对Fragment的学习,尝试着写了一个小Demo,将在开发的 ...

  8. android兼容小米xiaomi刘海屏解决方案

    引用自小米官方文档,这里缩减了一些内容,捡取重要内容. 转载请标明出处: https://blog.csdn.net/DJY1992/article/details/80688376 本文出自:[奥特 ...

  9. Android Studio 第一次新建Android Gradle项目超级慢的解决方案

    Android Studio 第一次新建Android Gradle项目超级慢的解决方案 参考文章: (1)Android Studio 第一次新建Android Gradle项目超级慢的解决方案 ( ...

最新文章

  1. w命令、vmstat命令、top命令、sar命令、noload命令
  2. mysql 动态显示月份列_mysql 中动态显示列
  3. Access 字段拼接(UPDATE 数据追加)
  4. php+ajax+jquery分页并显示数据
  5. 使用Eclipse连接SAP云平台上的HANA数据库实例
  6. ajax获得excel文件流在前端打开_主流前端技术讲解,面试必考!
  7. 将M进制的数转换为N进制的数(java)
  8. ARM:供给中国 160 亿颗芯片,继续授权华为!
  9. parfor —— matlab 下的并行循环
  10. 全文搜索引擎 Elasticsearch 安装
  11. java对公项目_5个让人激动的Java项目
  12. badboy设置中文_录制脚本badboy工具使用手册
  13. BZOJ1059 [ZJOI2007]矩阵游戏
  14. Excel表格转换为Word表格,并且保留Excel表格中公式不发生变化
  15. STL源码剖析学习之increment、decrement、dereference实现源码
  16. 运行web项目提示异常:non-compatible bean definition of same name and class【com.xxx.xxx.XXX】
  17. 计算机科学大师唐纳德,现代计算机科学的鼻祖
  18. java 导出压缩文件,里面文件名字乱码的问题(麒麟系统,linux)
  19. matlab数组下标可为正整数和逻辑数
  20. R、RStudio下载与安装方法

热门文章

  1. 华科计算机组成原理运算器ALU实验(LogisimEducoder)
  2. solar在linux系统下的部署过程
  3. html简单个人网页制作 HTML5+CSS大作业——程序员个人简历设计(5页)
  4. pythonn说句心里话_《说句心里话》笑力满格 “战神”常远颠覆自我
  5. RTImageAssets-自动生成iOS 不同分辨率的插件,verygood
  6. 项目管理中什么最重要?
  7. 把时间当作朋友 -- 读书笔记
  8. 阅读摘抄——把时间当做朋友
  9. socket接收消息 字符串长度
  10. Rust代码检查工具Clippy原理浅析