两层Fragment嵌套,外层Fragment切换时内层Fragment不显示内容

尊重他人劳动成果,转载请说明出处:http://blog.csdn.net/bingospunky/article/details/46847269

需求

在搭界面有这么样一个需求:需要两层的Fragment嵌套,内层需要滑动切换效果,外层界面不需要滑动效果。那么内层使用ViewPager切换,外层就使用replace切换。这样搭出来的界面不能得到需要的效果,内层的Fragment只有第一次能显示内容,之后切换外层Fragment时,内层Fragent都是空着的。
我再尝试两层Fragment都使用replace切换,这样就能达到效果了。但是项目里需要内层需要滑动切换的效果。对于这样的情况可以稍微修改一下需求,取消内层滑动效果的需求就ok了,但是作为一个求甚解的人,我还是想尝试一下实现内层滑动效果。那么怎么实现呢?

show and hide

在切换外层Fragment时使用的是replace,被切换掉的Fragment的生命周期函数会执行到onDestroy。我猜测内层的Fragment空着是因为被切换掉到Fragment在执行onDestroy函数时,对FragmentManager做了一些不可告人的事情导致的。那么我们可以选择不执行onDestroy的方式切换,那么就选择show/hide进行切换外层Fragment。这个方式是可行的但是会产生一个新的问题。

当进程被杀死以后

比如一个activity已经add了4个Fragment,我们在切换的时候使用show/hide切换。如果这个时候按home键返回桌面,在之后的一段时间里,由于内存的原因,这个应用的进程被系统杀死了,然后我们通过长按home键回到这个应用,那么系统会创建一个新的activity给我们。在系统创建的新的activity里,不能很好的还原刚才已经add的4个Fragment,在界面里还是会有4个Fragment(如果Fragment没有背景色,那么这4个Fragment会重叠在一起),并且切换事件也不响应。那么我们怎么解决这个问题呢?首先我们要对这个问题进行定性,当我们给activity添加多个Fragment且该应用被系统杀死后重新创建时,多个Fragment会出现异常。当我们出现这种情况时,可以finish掉这个activity。因为这种情况很少出现,所以问可以finish这个activity。

最后

这篇文章只是介绍了我遇到的两层Fragment嵌套的问题,以及我解决问题的表面现象。刚才我也尝试了一下去读Fragment的源码,但是还没有进展,在接下来的时间我会阅读这部分的源码,然后从源码到角度找到上面两个问题(1.两层Fragment切换时,为什么内层Fragment不显示?2.activity被系统杀死,重新生成时,为什么Fragmant会重叠且不响应切换?)的原因,就像我前面的从源码角度解决问题一样。

最后的最后

转眼,已经凌晨四点半了,凌晨四点半的五道口很安静,很美。



  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值