Android中Fragment 重叠遮盖问题解决办法
发布时间 - 2026-01-11 01:07:01 点击率:次1.导致Fragment 重叠 和遮盖的原因

主要还是因为Fragment的状态保存机制,当系统内存不足时,Fragment的主Activity被回收,Fragment的实例并没有随之被回收。
Activity被系统回收时,会主动调用onSaveInstance()方法来保存视图层(View Hierarchy),所以当Activity通过导航再次被重建时,之前被实例化过的Fragment依然会出现在Activity中,然而从上述代码中可以明显看出,再次重建了新的Fragment,综上这些因素导致了多个Fragment重叠在一起。
2.如果这个问题不是必现问题 ,调试的时候 可以将 开发者选项中的 “不保留活动” 打开 ,为了 模拟 Activity 被及时回收。
3.onSaveInstanceState()与onRestoreInstanceState()这两个方法。
原本以为只有在系统因为内存回收Activity时才会调用的onSaveInstanceState(),居然在转跳到其他Activity、打开多任务窗口、使用Home回到主屏幕这些操作中也被调用,然而onRestoreInstanceState()并没有在再次回到Activity时被调用。而且我在onResume()发现之前的Fragment只是被移除,并不是空,所以就算你在onResume()中执行问题一中创建的Fragment的方法,同样无济于事。所以通过remove()宣告失败。
接着通过调查资料发现Activity中的onSaveInstanceState()里面有一句super.onRestoreInstanceState(savedInstanceState),Google对于这句话的解释是“Always call the superclass so it can save the view hierarchy state”,大概意思是“总是执行这句代码来调用父类去保存视图层的状态”。其实到这里大家也就明白了,就是因为这句话导致了重影的出现,于是我删除了这句话,然后onCreate()与onRestoreInstanceState()中同时使用问题一中的创建Fragment方法,然后再通过保存切换的状态,发现结果非常完美。
//记录Fragment的位置
private int position = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_index);
setTabSelection(position);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
position = savedInstanceState.getInt("position");
setTabSelection(position);
super.onRestoreInstanceState(savedInstanceState);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
//记录当前的position
outState.putInt("position", position);
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android中Fragment
# 重叠遮盖
# Android
# Fragment
# 重叠问题解决
# Android基础之Fragment与Activity交互详解
# Android Fragment 基本了解(图文介绍)
# Android 管理Activity中的fragments
# Android的Fragment的生命周期各状态和回调函数使用
# Android程序开发之Fragment实现底部导航栏实例代码
# Android Map新用法:MapFragment应用介绍
# FrameLayout和Fragment处理Android应用UI布局实例
# Android基础之使用Fragment适应不同屏幕和分辨率(分享)
# 这句话
# 我在
# 一句
# 也就
# 多个
# 出现在
# 你在
# 这个问题
# 这两个
# 希望能
# 然后再
# 无济于事
# 中也
# 谢谢大家
# 跳到
# 这句
# 时才
# 方法来
# 移除
# 综上
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
北京网站制作的公司有哪些,北京白云观官方网站?
Java类加载基本过程详细介绍
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
Laravel怎么使用Intervention Image库处理图片上传和缩放
Laravel PHP版本要求一览_Laravel各版本环境要求对照
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
jQuery中的100个技巧汇总
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
浅述节点的创建及常见功能的实现
常州企业网站制作公司,全国继续教育网怎么登录?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
如何在IIS服务器上快速部署高效网站?
HTML 中动态设置元素 name 属性的正确语法详解
微信小程序 input输入框控件详解及实例(多种示例)
如何在Windows虚拟主机上快速搭建网站?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
如何在Ubuntu系统下快速搭建WordPress个人网站?
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
如何快速选择适合个人网站的云服务器配置?
Laravel怎么上传文件_Laravel图片上传及存储配置
Laravel如何保护应用免受CSRF攻击?(原理和示例)
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
Linux系统命令中screen命令详解
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
打造顶配客厅影院,这份100寸电视推荐名单请查收
nginx修改上传文件大小限制的方法
手机软键盘弹出时影响布局的解决方法
香港服务器部署网站为何提示未备案?
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
音乐网站服务器如何优化API响应速度?
奇安信“盘古石”团队突破 iOS 26.1 提权
如何在自有机房高效搭建专业网站?
如何快速重置建站主机并恢复默认配置?
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
香港服务器如何优化才能显著提升网站加载速度?
Laravel如何实现用户注册和登录?(Auth脚手架指南)
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
Laravel如何实现本地化和多语言支持?(i18n教程)
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
Bootstrap CSS布局之列表
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?

