
ViewPager是android开发中经常用到的一个控件。假如ViewPager中的每一个Fragment都需要通过网络拉取数据加载,而ViewPager是默认加载前两项的,所以很容易造成网络丢包或者网络堵塞等问题,因此Fragment使用懒加载就显得很有必要。
其实要实现fragment懒加载也并不复杂,在Fragment中有一个setUserVisibleHint
方法,这个方法比onCreate()方法更早被调用的,它会通过isVisibleToUser告诉我们当前Fragment是否可见,那么我们就可以在可见的时候再进行网络加载。
public void setUserVisibleHint(boolean isVisibleToUser)
只有fragment可见时,isVisibleToUser才为true,否则为false。所以我们可以重写setUserVisibleHint方法,然后在可见时进行网络数据加载:public void setUserVisibleHint(boolean isVisibleToUser) {
if (isVisibleToUser) {
pullData();
} super.setUserVisibleHint(isVisibleToUser);
}
但是我们一般都会在数据加载完成时更新UI,就有可能当拉取数据是极快就返回,但是UI还没有绑定,或者是Adapter初始化等,那么就无法更新UI了,所以Fragment给我们提供了另一个方法getUserVisibleHint(),它就是用来判断当前Fragment是否可见,所以我们就可以在一系列变量初始化完成后再判断是否可见,若可见再进行数据拉取:
public void onStart() {
super.onStart();
Log.d("TAG", mTagName + " onStart()"); ...
if(getUserVisibleHint()) {
pullData();
}
}
当然,如果你的网络请求并不需要涉及UI更新,那么就可以直接在setUserVisibleHint(boolean
isVisibleToUser)里操作。所以最终还是要根据各自的实际用途来使用。
更多精彩内容,请关注山楂干Linux





