在Android开发过程中,有时会使用viewPaper同时加载多个fragment,以实现多个tab页面快速切换。但是若fragment初始的数据较多时,就可能导致该页面加载较慢。
为了解决上面的问题,我们使用到了懒加载,这时我们就需要使用setUserVisibleHint()与getUserVisibleHint()这两个方法了。
那么这两个方法是怎么实现数据刷懒加载的呢?
我们结合fragment的生命周期来解释这个问题,请大家看下面这张fragment的生命周期图:
先说setUserVisibleHint()的调用时机,viewPaper监听了切换tab事件,切换tab时就会调用setUserVisible()。
其实setUserVisibleHint()这个方法的首次调用是先于fragment.onCreate()的。当viewPaper初始化完成以后,执行viewPaper.setAdapter()的时候就会执行setUserVisibleHint(),待setAdapter()执行完成以后,才会进入fragment的生命周期。
接下来我们再说getUserVisibleHint()。它的原理比较简单,我就直接上源码了
大家可以看见他就是返回一个boolean类型的值,那么这个值的含义是什么呢?
还是回到setUserVisibleHint()这个方法,大家直接看源码吧
大家可以看见源码中对这个参数的说明,当它为true时表示这个fragment是可见的。这个时候就比较明显了,getUserVisibleHint()的含义就是获取该fragment是否为可见的状态值。
这个时候在给大家看看上面说的懒加载是怎么实现的吧。
我们在调用setUserVisibleHint()时加载数据时,一般都会调用getUserVisibleHint()获取当前fragment是否可见,只有当fragment为可见状态时(getUserVisibleHint()返回值为ture),才会加载数据。