Fragment 重叠(重影)问题

资源回收导致重建 Activity和 Fragment 原文标题:Android中管理多个Fragment的最佳实践,完美解决保存状态与重影问题 自从在Android 3.0引入Fragment以来,它被使用的频率也随之增多。Fragment带来的好处不言而喻,解决了不同屏幕分辨率的动态和灵活UI设计。但是在Activity管理多个Fragment中,通常会遇到这些问题: 1、Fragment的状态保存 2、Fragment的重影 阅读详情

转自:http://wml.farbox.com/post/fragment-overlay-problem 

在最近做的项目中,遇到了 Fragment 重叠的问题。具体的情况是,app 需要在多个 Fragment 间切换,并且保存每个 Fragment 的状态。官方的方法是使用 replace() 来替换 Fragment,但是 replace() 的调用会导致 Fragment 的 onCreteView() 被调用,所以切换界面时会无法保存当前的状态。因此一般采用 add()、hide()与 show()配合,来达到保存 Fragment 的状态。

正常情况下显示是对的,现象发生在我切换到其他的app,操作一会之后,再回到当前的app,有一定几率会出现 Fragment 重叠的现象。

可以通过下面的方式进行手动重现这个BUG:
1.手机的 "设置" - "开发者选项" - 打开"不保留活动"(主要用于模拟Activity被及时回收)
2.把 app 切换到后台,再重新打开,通过点按不同的 tab 来切换 Fragment

▲ 重现 Fragment 的重叠

起初我以为是我在使用add()、hide() 、show() 切换 Fragment 的时候有什么地方使用的不对,尝试去解决重叠的 bug,无果后,还是通过 google 找出了原因和解决方案。

原因

使用 Fragment 的状态保存,当系统内存不足,Fragment 的宿主 Activity 回收的时候,Fragment 的实例并没有随之被回收。Activity 被系统回收时,会主动调用 onSaveInstance() 方法来保存视图层(View Hierarchy),所以当 Activity 通过导航再次被重建时,之前被实例化过的 Fragment 依然会出现在 Activity 中,此时的 FragmentTransaction 中的相当于又再次 add 了 fragment 进去的,hide()和show()方法对之前保存的fragment已经失效了。综上这些因素导致了多个Fragment重叠在一起。

解决

方案一:
1.给每个 Fragment 加一个 Tag
2.在 onCreate(Bundle savedInstanceState) 中判断 Bundle savedInstanceState 是否不为空
3.不为空则进行 find Tag,重新给几个 frament 赋值
这样子仍是对之前保存的 fragment 操作,成功解决了重叠的问题。

方案二:
Activity 中的 onSaveInstanceState() 里面有一句super.onSaveInstanceState(outState);,Google 对于这句话的解释是 “Always call the superclass so it can save the view hierarchy state”,大概意思是“总是执行这句代码来调用父类去保存视图层的状态”。通过注释掉这句话,这样主 Activity 因为种种原因被回收的时候就不会保存之前的 fragment state,也可以成功解决重叠的问题。

 
  1. //解决重叠,方法1@Override
  2. protectedvoidonSaveInstanceState(Bundle outState) {
  3. //如果用以下这种做法则不保存状态,再次进来的话会显示默认tab
  4. //super.onSaveInstanceState(outState);
  5. }
Fragment多个的切换重叠问题解决 对多个Fragment的切换导致页面重叠的问题进行解决,经过验证可以使用。 立即下载

相关推荐

关于Fragment重叠问题分析和解决

关于Fragment重叠问题分析和解决 详细见博客: http://blog.youkuaiyun.com/whitley_gong/article/details/51987911

Fragment重影(重叠)白屏等问题原理解析,以及解决方案

前言 绝大部分的app首页架构均为Tab + Fragment,当程序发生异常自动恢复,或者app长时间处于后台恢复后,Fragment出现重影(重叠)等问题。当然部分不顾及页面层级的小伙伴,每个Fragment的view都设置了背景,可能就察觉不出来,但是并不代表没有。然后很多Fragment里面又还有Fragment的使用不当甚至会出现白屏的现象。 1 重影(重叠) 1.1 触发原因 Ac...

weixin_34319817的博客 641

Android关于Fragment重叠问题分析和解决

Android关于Fragment重叠问题分析和解决 Android关于Fragment重叠问题分析和解决 Android关于Fragment重叠问题分析和解决

解决Fragment重影问题(简单粗暴,通俗易懂)

问题原因 造成fragment重影的原因是因为我们代码里用add fragment 然后调用hide和show来替换replace方式(因为这样做不用每次切换fragment都重新加载界面和数据)。但是正因为这样当我们activity异常关闭重启时你原先的所有fragment也都会跟着activity重新绘制出来,然而这个时候所有的hide和show失灵了,因为我们默认是没有找到系统帮我们恢复的...

System.o的博客 4154

Ubuntu20.04/Debian10安装向日葵远程控制踩坑实录(附依赖问题解决方案)

本文详细介绍了在Ubuntu 20.04/Debian 10系统上安装向日葵远程控制软件的全过程,重点解决了常见的依赖问题,特别是libwebkitgtk相关错误。通过自动修复、手动修改.deb包依赖和使用兼容层三种解决方案,帮助用户顺利完成安装并优化远程控制体验。

silver的专栏 749

第四次工业革命如何重构产业逻辑:写给技术人的趋势推演

第四次工业革命正在以人工智能、大数据和新能源为核心重构全球产业逻辑。本文从历史规律切入,指出技术革命本质是生产力跃迁和产业链话语权的转移。当前AI基础设施竞赛已形成算力、数据、算法三大支柱,其中算力投资首超石油领域,绿色算力与新型架构成为关键。数据治理带来隐私计算等新技术约束,数据中心正向液冷技术和"东数西算"模式演进。技术人需构建三大竞争力:夯实分布式系统等底层能力、培养跨领域知识融合能力、善用约束条件驱动创新。这场变革将奖励那些深度理解技术本质并能快速适应的实践者。

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 289

fragment重影问题

fragment重影的原因: 为了不每次切换fragment都重新加载界面和数据,我们用add fragment 然后调用hide和show的方式来显示fragment。当activity重启时,保存信息的方法onSaveInstanceState()将我们原来的fragment实例保存下来了,我们默认是没有找到系统帮我们恢复的fragment,而是自己又重新new了一个fragment出来,这

670

【水下小目标检测】SWIPENet与样本重加权:应对模糊与噪声的深度学习策略

本文深入探讨了水下小目标检测的挑战与解决方案,重点介绍了SWIPENet网络架构与IMA样本重加权算法。通过空洞卷积模块、特征金字塔重构和多尺度预测机制,SWIPENet有效提升了模糊目标的检测精度。结合Invert Multi-Class Adaboost算法,系统性地解决了水下环境中的样本不均衡问题,在URPC数据集上实现了48.8%的mAP,特别适合海洋生物检测等应用场景。

weixin_29057163的博客 344

在低版本Android中fragment会overlay ActionBar区域

1 问题 It works like a charm on android 4.0+ and also on android 2.3 with a normal Activity that has setContentView in onCreate, but when the activity is loading an Fragment in onCreate the ActionBar

zqx198810的专栏 1325

告别手动打卡:逍遥模拟器+宥马运动自动跑步脚本配置全流程

本文详细介绍了如何利用逍遥模拟器和自动化脚本实现宥马运动的自动跑步功能,告别手动打卡的繁琐。从环境准备、脚本部署到定位配置和智能调度,全流程指导用户完成自动化设置,提升效率并确保运动数据的真实性。

weixin_42532473的博客 539

【医学影像】Deep Learning for Automatic Pneumonia Detection

写在前面的话: 这篇论文是北美放射学会(RSNA)在Kaggle平台上托管的肺炎区域检测挑战赛取得第二名成绩的解决方案。因为笔者需要用到其中的图像增强方案,因此本篇博客只介绍了数据集和图像增强,关于模型的改进和其它改进点没有涉及。 论文地址:https://arxiv.org/abs/2005.13899 代码地址:https://github.com/tatigabru/kaggle-rsna 比赛地址:https://www.kaggle.com/c/rsna-pneumonia-detection-c

chenzhoujian_的博客 1567

Fragment重叠的问题

最近几天在写多个fragment页面,碰到了一个老生常谈,也是非常常见的问题,那就是fragment重叠的问题,我相信这个问题只要是Android的猿人都会碰到,确实是太常见了,解决起来也是非常简单的,我看了看很多博客,用的最多的解决办法是给fragment加个背景颜色,因为fragment默认的背景色是透明的,这样确实能解决重叠的问题,但是只允许在特定的布局下,局限于布局特别的简单,一旦布局复杂了

hx13651244616的博客 828

【python股票价格预测】基于LSTM(长短期记忆网络)的股票价格预测(附python代码)

【python股票价格预测】基于LSTM(长短期记忆网络)的股票价格预测(附python代码)

k8291121的博客 1012

Fragment的重叠(重影)问题的原因以及解决方法

在最近做的项目中,遇到了 Fragment 重叠的问题。具体的情况是,app 需要在多个 Fragment 间切换,并且保存每个 Fragment 的状态。官方的方法是使用 replace() 来替换 Fragment,但是 replace() 的调用会导致 Fragment 的 onCreteView() 被调用,所以切换界面时会无法保存当前的状态。因此一般采用 add()、hide()与 sh...

a83350695的博客 4278

anaconda navigator 卡在loading application界面一直没有反应解决办法

在打开anaconda navigator 程序的时候,遇到了2个问题。第一个问题:打开的时候弹出提示:There is an instance of Anaconda Navigator already running.第二个问题:程序一直卡在loading application界面一直没有反应。以下是我的解决办法,有效果。

猿小白的博客 4384

在 Eclipse 里快速用上 SAP Joule:ABAP 开发者的 AI 助手上手指南

本文介绍了SAP Joule for developers如何集成在ABAP开发工具中,为开发者提供AI辅助能力。主要内容包括: Joule作为ADT的增强层,直接嵌入开发流程,支持在项目资源管理器、代码编辑器等场景下通过上下文菜单调用AI功能。 核心使用方式:打开Joule视图后,可在开发对象、代码片段等上下文中使用自然语言交互,请求解释、生成测试或获取示例代码。 重点功能: Explain:解释现有代码逻辑,降低理解成本 ABAP Unit测试生成:快速创建与上下文相关的测试用例 支持在传输管理器等完整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 393

Android Fragment重影的解决方法

最近在使用fragment进行开发的过程中,遇到了重影问题 多个Fragment的内容重叠在一起了 其表示如下图所示: 解决这个问题的方法是,给每个fragment的rootView设置一个背景颜色 如下:

walkeryu 866

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

多层Fragment嵌套出现重影问题_原理解析_解决方法(Winter原创,转载请注明出处)

多层Fragment嵌套出现重影问题_原理解析_解决方法(Winter原创,转载请注明出处) 1解决bug的思想: //step1:当bug被发现(排除极低偶然性,单次性,开发工具导致) //step2:根据经验判断bug的重现场景,多次测试,直到精准的定位bug //step3:根据重现场景找到对应的代码 //step4:分析区域代码是否会影响到其他功能

micotale的博客 1643

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Fragment 重叠 遮盖问题 完美解决

1.导致Fragment 重叠 和遮盖的原因 主要还是因为Fragment的状态保存机制,当系统内存不足时,Fragment的主Activity被回收,Fragment的实例并没有随之被回收。 Activity被系统回收时,会主动调用onSaveInstance()方法来保存视图层(View Hierarchy),所以当Activity通过导航再次被重建时,之前被实例化过的Fragment依

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 3850

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Fragment 重叠 遮盖问题

1.导致Fragment 重叠 和遮盖的原因  主要还是因为Fragment的状态保存机制,当系统内存不足时,Fragment的主Activity被回收,Fragment的实例并没有随之被回收。 Activity被系统回收时,会主动调用onSaveInstance()方法来保存视图层(View Hierarchy),所以当Activity通过导航再次被重建时,之前被实例化过的Fragment依然会...

weixin_33806509的博客 167

java.lang.RuntimeException:Unable to start activity ComponentInfo{com.meizu.beautify/com.my.viewc.Ma

在使用fragment的时候,遇到如下的bug: java.lang.RuntimeException:Unable to start activity ComponentInfo{com.meizu.beautify/com.my.viewc.MainActivity}: android.support.v4.app.Fragment$InstantiationException: Unabl

你好邱林和的专栏 3900

应用异常导致重新启动后Fragment布局发生重叠

我的面试经验分享可能不会去罗列太多的具体题目,因为我依然认为面试经验中最宝贵的不是那一个个具体的题目或者具体的答案,而是结束面试时,那一刻你的感受以及多天之后你的回味~很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含。

m0_74530944的博客 993
上一篇: Android 三种动画详解
下一篇: 超级课程表课表的界面的实现
code_dream_wq
博客等级 码龄10年 51粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值