Android Fragment遇到重叠问题的解决方案
原因如下:
容器的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遇到重叠问题的解决方案相关推荐
- [转]Android fragment 重叠问题——通过hide,show方式导致的解决方法
[转]Android fragment 重叠问题--通过hide,show方式导致的解决方法 参考文章: (1)[转]Android fragment 重叠问题--通过hide,show方式导致的解决 ...
- Android Fragment嵌套导致的bug
原文链接 Android 多个Fragment嵌套导致的三大BUG Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误 http ...
- Android Fragment应用实战
现在Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决Android Pad屏幕比较大,空间不能充分利用的问题,但现在即使只是在手机上, ...
- android 关于google刘海屏的解决方案
转载请标明出处: https://blog.csdn.net/DJY1992/article/details/80689308 本文出自:[奥特曼超人的博客] 推荐: android 兼容所有刘海屏的 ...
- Android Fragment 基本介绍
Android Fragment 基本介绍 Android Fragment 基本介绍 Fragment Android是在Android 3.0 (API level 11)开始引入Fragment ...
- android Fragment 学习资料推荐
为什么80%的码农都做不了架构师?>>> android Fragment 学习资料推荐:android大神 郭霖 http://blog.csdn.net/guolin_ ...
- 【转】基于Android Fragment功能的例子
原文网址:http://blog.csdn.net/eyu8874521/article/details/8252216 通过最近空闲时候对Fragment的学习,尝试着写了一个小Demo,将在开发的 ...
- android兼容小米xiaomi刘海屏解决方案
引用自小米官方文档,这里缩减了一些内容,捡取重要内容. 转载请标明出处: https://blog.csdn.net/DJY1992/article/details/80688376 本文出自:[奥特 ...
- Android Studio 第一次新建Android Gradle项目超级慢的解决方案
Android Studio 第一次新建Android Gradle项目超级慢的解决方案 参考文章: (1)Android Studio 第一次新建Android Gradle项目超级慢的解决方案 ( ...
最新文章
- w命令、vmstat命令、top命令、sar命令、noload命令
- mysql 动态显示月份列_mysql 中动态显示列
- Access 字段拼接(UPDATE 数据追加)
- php+ajax+jquery分页并显示数据
- 使用Eclipse连接SAP云平台上的HANA数据库实例
- ajax获得excel文件流在前端打开_主流前端技术讲解,面试必考!
- 将M进制的数转换为N进制的数(java)
- ARM:供给中国 160 亿颗芯片,继续授权华为!
- parfor —— matlab 下的并行循环
- 全文搜索引擎 Elasticsearch 安装
- java对公项目_5个让人激动的Java项目
- badboy设置中文_录制脚本badboy工具使用手册
- BZOJ1059 [ZJOI2007]矩阵游戏
- Excel表格转换为Word表格,并且保留Excel表格中公式不发生变化
- STL源码剖析学习之increment、decrement、dereference实现源码
- 运行web项目提示异常:non-compatible bean definition of same name and class【com.xxx.xxx.XXX】
- 计算机科学大师唐纳德,现代计算机科学的鼻祖
- java 导出压缩文件,里面文件名字乱码的问题(麒麟系统,linux)
- matlab数组下标可为正整数和逻辑数
- R、RStudio下载与安装方法