Fragment 生命周期的坑- 记一次毫无防备的无知

本文探讨了在Android开发中Fragment生命周期的一个常见问题,即通过hide和show方法管理Fragment时,如何正确控制标题栏的变化。作者分享了一次在切换Tab时遇到的图标显示错误的经历,分析了Fragment的生命周期,特别是onHiddenChanged方法在处理隐藏和显示状态变化时的重要性。文章还对比了add/show/hide与replace方法管理Fragment的区别,建议在考虑性能时使用hide和show,并利用onHiddenChanged调整UI状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Fragment 生命周期的坑- 记一次毫无防备的无知

项目中最近有个需求是这样的,主页面包含 3 个 Fragment,对应底部三个 Tab,如下图显示:

这里写图片描述

这里写图片描述

这里写图片描述

相信大家对这种需求并不陌生,实现方式是自定义 Toolbar 做页面的 title,当然本文的中点不在于介绍如何自定义该标题栏。而是在于 Fragment 如何控制标题栏的改变。

问题出现在我是用的是 Fragment 的 add 方法将Fragment添加到Activity中,然后使用 hide 和 show 方法对 Fragment 进行显示和隐藏。 直到今天自己在把弄 App 的时候发现,在通过底部 tab 切换 Fragment 的时候,左侧的图标(圆形用户头像和加号会恰如其份的显示和替换),但是当我替换从第一个,或第二个 tab 跳转到二级页面的以后再回来,左侧图标就变成了加号。 这让我很懊恼,我尝试这从对应的 Fragment 的 onResume 和承载这三个 Fragment 的 Activity 的 onResume 方法中去强制改变这个图标显示,但发现这种方法并不是那么可行。

本着「先修复bug,在找到原因的做法」,梳理了整个页面初始化的流程。然后在生命周期内部都打印了log,发现一个「奇怪」的现象,我发现随着 MainActivity 的 onResume 执行,所有被添加到这个 Activity 的 Fragment 都执行各自的 onResume方法都被执行:

MainActivityonResume
HomeFragment 的 onResume
SubsFragment 的 onResume
OptionalFragment 的 onResume

于是我知道我的错误在哪里了,我可能在第三个 Framgment 的 onResume 方法中替换了左侧按钮的图片。导致从其他页面回来 onResume 按顺序执行,最后执行 optionalFragment 所以看到的按钮变成了加号。


经过以上的分析bug是解决了一半了,但是疑问来了:

  1. 面试被问烂的 Fragment 生命周期你真的了解么 ?
  2. Fragment 的两种管理方式对应的生命周期有什么不同 ?
  3. 应该在哪个生命周期做用户可见的必要操作?

Fragment 的生命周期

老生常谈,相信大家都能倒背如流了,来一起背一下:「

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值