关于横竖屏切换后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
所以又去搜了findFragmentByTag()和横竖屏切换相关的文章
得知,在横竖屏切换后由于fragment都为null,所以拿不到fragment,hide()函数失效,所以发生了重叠。
修改步骤:
在add()里加上第三个参数 tag
transaction.add(R.id.content, messageFragment,"message");
在hideFragments()函数里用findFragmentByTag()获取fragment。
messageFragment = (MessageFragment) fragmentManager.findFragmentByTag("message");
再进行fragment是否为空时就可以正确判断。
方法1是使横竖屏切换时不会销毁Activity(fragment)
方法2 是找回被还原的fragment
参考:http://www.cnblogs.com/wjhblogs/p/4688921.html
看到了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
相关文章推荐
- fragment 的切换并且解决重叠的问题
- 关于横竖屏切换的问题解决
- 解决当使用hide()和show()在多个Fragment 切换时,出现的重叠问题
- 关于Fragment重叠问题分析和解决
- Fragment 实现android项目主流APP Tab (微博,今日头条等等),解决横竖屏切换重叠,以及切换回调。
- 1Activity+多个Fragment模式下进行横竖屏切换的问题及解决方式
- 关于fragment切换后,viewpager自动隐藏的问题解决
- 关于Activity加载Fragment切换Show和Hide重叠问题
- Android 关于Fragment重叠问题分析和解决
- 解决当使用hide()和show()在多个Fragment 切换时,出现的重叠问题
- 解决Android横竖屏切换数据丢失问题
- 区别对待 【找到问题发生的原因】 以及 【关于这个问题的 「正确可行」 的解决方法】
- 关于android 横竖屏切换问题阐述
- Fragment 横竖屏切换问题
- 关于datagridview单元格不切换焦点无法获得新输入数据的问题解决方法
- Android中解决手机屏幕横竖屏切换问题
- 关于Android横竖屏切换的解决方法
- 关于Android横竖屏切换的解决方法
- 关于“打开项目**时发生问题,尝试退出并重新启动应用程序。如果问题仍然存在,则可能是由于正在使用不支持的项目版本,或者项目文件可能损坏”的问题的解决办法。
- 关于Android横竖屏切换的解决方法