多个Fragment使用show和hide来切换时的画面重叠的问题

写在前面的话:

第一次写Blog,在这之前,无论遇到什么问题,哪怕是求助过很多帖子,很多群里的朋友才得以解决的问题都不会写个Blog或者发个帖子来分享。但这不是说没有分享精神,而是解决一个难题的时候,心情是很愉悦的,于是立即投入接下来的开发工作当中。

但在一次偶然需要用到一个开源项目,该项目在git上被找到,还和作者问了很多问题,终于得以解决,作者很热心,可以说是有问必答,后来他教会我,说解决问题了,一定要分享,启发很大,于是开始学习写写心得。

由于是第一次写,所以可能显得没有逻辑,请见谅。大笑


好了,那么进入正题吧~

问题场景:

1、在一个Activity中通过使用Fragment的show和hide方法实现类似以前TabHost的效果

如图:

2、如果进入此页面后,被置入后台运行(按下Home键,总之执行了onStop方法)之后,如果系统内存不足,需要释放一些内存的时候,此时Activity会执行onSaveInstance方法,进而释放Activity的资源,那么Activity里面的所有资源应当释放才对。可是...Fragment却不是个听话的孩纸,他依然我行我素的占据着他的“地盘”,即没有被释放


问题现象:

那么此时会造成什么影响呢?再次进入时,由于Activity已被Kill,看过Activity生命周期的童鞋应该知道,如果再执行了onStop之后被Kill了,那么会重新执行一次onCreate。而上面提到的Fragment并没有被释放,此时又重新初始化,会怎样?两个界面重合了,准确的说是两层界面重合了,看起来似乎是点击下面的Tab都不会切换界面了,但实际原因却是切换了的,只是被没有释放的Fragment挡住了而已!!


问题解决:

那么如何解决呢?

这个问题,貌似有个官方的解决方案!(很高大上有木有)

就是在onCreate的时候根据参数”savedInstanceState“的值,来判断是初始化界面还是恢复界面(恢复的时候就不用实例化Fragment)了,可这种方式,对于单个Fragment就占满一屏,且有多个这样的Fragment切换的时候并没有效果。

so...只能用其他办法。

想想思路,不就是因为他挡住了屏幕么,那么用个容器来装这些个Fragment,显示的时候不直接显示Fragment而是显示该容器不就解决了么。

那么解决办法就有很多了:

比如我用的ViewPager来装这些Fragment们!

当然你还可以使用Gallery、HorizontalScrollView、RelativeLayout、甚至是ViewGroup来装,只需要对这些个容器进行统一管理即可避免该问题


后记:

这个办法相当于把问题抛开了而已,并没有正面去探究为何Fragment没有被释放的原因,不过既然官方都说有这个bug,那姑且算是一个”难题“吧,期待以后的版本,Fragment的使用能变得更加简单方便!


转载自: http://blog.csdn.net/qq_25462737/article/details/42915685

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值