之前一直想过使用懒加载,但是自己又比较懒惰,不想去看怎么实现的,就直接使用了别人写好的或者说是封装好的,拿来直接使用了.
一般我们会使用viewpager+fragment来实现一些界面操作;
但是我们希望在actviity可见的时候,只显示当前的fragment,这个时候呢,第一个可见的fragment数据加载了,但是其他fragment此时是不可见的,那么就不是很希望将其他几个fragment的数据也加载了;此时我们就希望用到懒加载,当界面可见的时候fragment才会加载数据;主要是通过setUserVisibleHint
这个方法来是实现懒加载.
ok,基本上使用情境我们也了解了,下面步入正题;
1.我们写了一个fragment,继承v4或者非v4包下的Fragment
2.声明一个成员变量View mView ;在onCreateView的方法中,使用如下判断
.if(mView==null) {
mView= inflater.inflate(R.layout.fragment_goodsmanager, container,false);
unbinder= ButterKnife.bind(this,mView);
}
return mView;
3.在onViewCreated方法中,我们需要判断当前fragment是否可见,
if(getUserVisibleHint()) { // 若可见
if(!hasLoadData) {//第一次打开activity的时候会走到这里,该标志是判断数据是否已经加载,我们会在setUserVisibleHint中进行其他操作;
loadGoodsDatas();// 若此时已经可见,并且数据还没有加载那么就可以加载数据了
hasLoadData=true;
}
}
super.onViewCreated(view, savedInstanceState);
3.我们重写了setUserVisibleHint方法;
super.setUserVisibleHint(isVisibleToUser);
// setUserVisibleHint可能会在onCreat方法之前执行,其生命周期执行顺序是不可预知的;
if(mView==null) {// 先于onCreateView方法执行的话,此时就不能执行加载数据的方法,因为会造成空指针异常
return;
}
// 若此时view依镜创建完成,而且数据尚未加载那么就可以执行网络加载数据的方法
if(!hasLoadData&& isVisibleToUser) {
loadGoodsDatas();
hasLoadData=false;
}
ok基本完毕,不明确以及错误的地方还请指正,谢谢.