在一个小项目中用到了ViewPager,所以在网上学习相关文章。
看到了VeiwPager结合Fragment的使用,所以重新学习了Fragment的相关知识。
在读了郭大神的博客之后顺手也做了一次,发现了一个小问题。
在这里作为学习总结记录,如有错误请指出,感谢。
原文:http://blog.youkuaiyun.com/guolin_blog/article/details/13171191
原文是通过在最开始将所有已添加(add)的fragment 用hide()函数隐藏起来。再把选中的fragment 展示(show())出来。
达到了点击tab切换fragment的效果。
按照原文照做了一遍,得到了同样的效果,但是在旋转屏幕时,发生了fragment的重叠
于是去查看了在横竖屏切换时fragment的生命周期
发现在切换后fragment会被重建。
参考:http://blog.youkuaiyun.com/u010216716/article/details/50697408
解决方法1:
在原文的评论中发现了解决方法是:
加上之后重新运行程序依旧会产生重叠效果。
又去查了android:confiChanges,得到:
对android:configChanges属性,一般认为有以下几点:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
加上了ScreenSize之后重试,发现切换屏幕不再产生重叠。
参考:http://blog.youkuaiyun.com/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是否为空时就可以正确判断。
总结:
参考:http://www.cnblogs.com/wjhblogs/p/4688921.html