Fragment与ViewPager结合使用白屏问题

最近的一个项目使用了fragment与viewpager结合的方式来展示内容,其中又包含网络请求与数据的列表展示。

Fragment与ViewPager的结合使用出现白屏问题,网上的答案很多,基本上能够都覆盖到。但是我遇见的这个问题,却很奇葩,尝试了所有方案都没有解决。最终在一行一行添加log观察打印结果时才注意到问题所在。所以写一篇文章来给大家提供个思路,也许会有开发者有着与我类似的操作。

我的这个白屏问题出现的情况是第一次加载几个tab页面之间的切换都正常,但是当切换后重新再次加载页面时,就出现了白屏现象,而且还是必现。在增加Log并观察打印结果后,终于发现。

一、如果你的网络请求结果会刷新UI,或者操作控件的展示之类,请务必查看程序的执行顺序。

ViewPager有个机制是预加载,当现实第一个页面时,实际上已经在准备第二个页面了。如果你的网络请求等操作都是一气呵成,那么第二个页面还未显示,但是已经开始执行一些流程了,展示第一个页面的时候,第二个页面的数据已经返回并执行了后续操作。如果你的UI操作是基于页面展示才执行的话,那么第二个页面的UI操作很有可能无法正常执行。

二、小心Fragment的生命周期

使用ViewPager展示fragment的时候,尤其要注意它的生命周期,因为有一种FragmentStatePagerAdapter是可以保存fragment的,这时候重新加载fragment可能会省略一些初始化步骤,如果你的程序有一些必要操作是跟初始化有关的话,那么也一定要注意,很有可能这些步骤未得到执行。以本人为例,我最初的网络请求是放到初始化程序后面顺序执行的。但是当重新加载fragment的时候,打印log发现fragment的一些方法被省略了,以至于在没有初始化我布局里的展示列表控件的时候,网络请求已经返回,但是找不到控件,数据无处展示。所以白屏。

三、解决方案

严格检查自己程序的执行逻辑与顺序,找出其中的依赖关系,确保每一步执行时,其依赖是可靠的。本人最终的处理方式是增加逻辑判断,在fragment的onResume方法中开始请求网络,此时布局是加载完成的,数据返回后不会找不到控件而无法展示,问题也得到了解决。如果不是我这种原因引起的白屏,我想大多数原因应该属于网上提供的常见问题类型,这里就不一一赘述了。大家可以去搜一些关键词如FragmentStatePagerAdapter,重写destroyItem方法,使用childFragmentManager等等。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值