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照片应用关联设置  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?