多个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
第一次写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
相关文章推荐
- 解决当使用hide()和show()在多个Fragment 切换时,出现的重叠问题
- 解决当使用hide()和show()在多个Fragment 切换时,出现的重叠问题
- Fragment重叠,使用show和hide控制显示和隐藏界面重叠问题;
- 关于Activity加载Fragment切换Show和Hide重叠问题
- Android 使用hide()和show()方法切换Fragment时的问题
- Android Fragment使用hide和show方法的问题
- 通过hide,show方式导致的fragment 重叠问题
- 使用事务通过show/hide切换Fragment(代码片段)----苏苏的小弟子
- Android fragment 重叠问题——通过hide,show方式导致的解决方法
- Android Fragment中使用hide/show出现页面重叠、穿透现象
- fragment重叠问题(add hide show方式)
- Android fragment 重叠问题——通过hide,show方式导致的解决方法(未解决)
- [转]Android fragment 重叠问题——通过hide,show方式导致的解决方法
- android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- Android fragment 重叠问题——通过hide,show方式导致的解决方法
- Android Fragment 切换多个界面 重叠问题 隐藏问题
- Android fragment 重叠问题——通过hide,show方式导致的解决方法
- android 使用fragment切换,出现fragment重叠的问题
- Android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态