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

关于横竖屏切换后Fragment发生重叠问题的解决

2016-09-08 09:02 246 查看
在一个小项目中用到了ViewPager,所以在网上学习相关文章。

看到了VeiwPager结合Fragment的使用,所以重新学习了Fragment的相关知识。

在读了郭大神的博客之后顺手也做了一次,发现了一个小问题。

在这里作为学习总结记录,如有错误请指出,感谢。

原文:http://blog.csdn.net/guolin_blog/article/details/13171191

原文是通过在最开始将所有已添加(add)的fragment 用hide()函数隐藏起来。再把选中的fragment 展示(show())出来。

达到了点击tab切换fragment的效果。



按照原文照做了一遍,得到了同样的效果,但是在旋转屏幕时,发生了fragment的重叠



于是去查看了在横竖屏切换时fragment的生命周期

发现在切换后fragment会被重建。

参考:http://blog.csdn.net/u010216716/article/details/50697408


解决方法1:

在原文的评论中发现了解决方法是:

在Manifest里的<activity>标签里增加

android:configChanges="orientation|keyboardHidden

加上之后重新运行程序依旧会产生重叠效果。

又去查了android:confiChanges,得到:

对android:configChanges属性,一般认为有以下几点:

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

但是大家需注意的是,在4.0以后的版本需要加上ScreenSize

加上了ScreenSize之后重试,发现切换屏幕不再产生重叠。

参考:http://blog.csdn.net/dengweijunkedafu/article/details/38925501

解决方法2:

在原文评论下又找到了新的解决方法:

所以又去搜了findFragmentByTag()和横竖屏切换相关的文章

得知,在横竖屏切换后由于fragment都为null,所以拿不到fragment,hide()函数失效,所以发生了重叠。

修改步骤:

在add()里加上第三个参数 tag

transaction.add(R.id.content, messageFragment,"message");

在hideFragments()函数里用findFragmentByTag()获取fragment。

messageFragment = (MessageFragment) fragmentManager.findFragmentByTag("message");

再进行fragment是否为空时就可以正确判断。

总结:

横竖屏切换后重叠的原因是:切换后Activity会重新调用各个生命周期,变成全新的对象, 所有Fragment中的成员变量也会丢失,但所有的Fragment状态数据会被保留并还原,这个时候所有的视图都会重新创建。

方法1是使横竖屏切换时不会销毁Activity(fragment)
方法2 是找回被还原的fragment

参考:http://www.cnblogs.com/wjhblogs/p/4688921.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android fragment