fargment重叠问题解决
来源:互联网 发布:淘宝app流量软件 编辑:程序博客网 时间:2024/05/16 05:32
一、问题描述
相信大家在使用Fragment的过程中,肯定碰到过Fragment重叠的问题,重启应用就好了。然而原因是什么呢?
二、原因分析
首先,Android管理Fragment有两种方式,使用add、hide、show的方式和replace方式,两种方式各有优缺点。
replace方式
如果使用这种方式,是可以避免重叠的问题,但是每次replace会把生命周期全部执行一遍,如果在这些生命周期函数 里拉取数据的话,就会不断重复的加载刷新数据,所以我们并不推荐使用这种方式。add、hide、show的方式
虽然这种方式避免了可能重复加载刷新数据的问题,但是会出现重叠的问题。
原因:
当系统内存不足,Fragment 的宿主 Activity 回收的时候,Fragment 的实例并没有随之被回收。Activity 被系统回收时,会主动调用 onSaveInstance() 方法来保存视图层(View Hierarchy),所以当 Activity 通过导航再次被重建时,之前被实例化过的 Fragment 依然会出现在 Activity 中,此时的 FragmentTransaction 中的相当于又再次 add 了 fragment 进去的,hide()和show()方法对之前保存的fragment已经失效了,所以就出现了重叠。
然而我们还是推荐使用这个,我们可以解决。
三、问题重现
既然要解决问题,自然要重现一下!
1.手机的 “设置” - “开发者选项” - 打开”不保留活动”(主要用于模拟Activity被及时回收)
2.把 app 切换到后台,再重新打开,通过点按不同的 tab 来切换 Fragment
四、解决方法
方法一、简单暴力
通过注释掉这句话,这样主 Activity 因为种种原因被回收的时候就不会保存之前的 fragment state
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
方法二、(推荐使用)
重写onAttachFragment,重新让新的Fragment指向了原本未被销毁的fragment,它就是onAttach方法对应的Fragment对象
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
方法三
思路同样是阻止系统恢复Fragment state,在FragmentActivity保存所有Fragment状态前把Fragment从FragmentManager中移除掉。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- fargment重叠问题解决
- margin重叠问题解决方案
- dataTables翻页重叠问题解决
- fragment重叠问题解决方案
- TableLayout+Fargment
- android fragmnet重叠问题解决方案
- iOS自定义TabBar使用popToRootViewControllerAnimated重叠问题解决
- Kali2016终端字符串重叠解问题解决
- iOS自定义TabBar使用popToRootViewControllerAnimated重叠问题解决
- 标签背景透明以及文字重叠问题解决方法
- phonegap开发中IOS状态栏与APP重叠问题解决方法
- NGUI如何进行自适应UI重叠问题解决方案
- iOS UITableView-FDTemplateLayoutCell框架 cell重叠 高度返回0.5问题解决
- tableViewCell 的重用机制下 (内容重叠)问题解决
- iOS开发-自定义TabBar使用popToRootViewControllerAnimated重叠问题解决
- z-index设置无效和元素重叠显示的问题解决
- Fargment传值的两种方法
- Activity和Fargment界面刷新和跳转
- 架构之集群、缓存
- 织梦dedecms如何做到真正的随机调取文章
- C#利用显示声明数据库事务完成快速存储
- vsftp简介
- 【caffe-Windows】微软官方caffe之 matlab接口cpu配置
- fargment重叠问题解决
- Android Launcher 专属页和生活页的实现(一)
- 第一次博客,从0开始
- Kafka消息生成,消费,存储机制
- 编写一个mysleep函数
- leetcode 347. Top K Frequent Elements
- ASP.NET加载FTP下的文件
- iptables:应用防火墙规则:ptables-restore: line 1failed [失败]
- Windows Server 2012 网络负载均衡(NLB)