您的位置:首页 > 移动开发 > Android开发

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

2015-01-20 11:39 519 查看
写在前面的话:

第一次写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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息