ViewPager + Fragment懒加载
- 就是对于很多的viewpager+fragment而言,viewpager每次都会预加载很多个fragment,若是fragment内数据操作十分复杂和耗时的话,就会导致大量的浪费内存问题。
- 所以我们先编写一个BaseFragment,以方便作为基类,之后的子类就容易写了.
主要是知道了Fragment源码里面有一个setUserVisibleHint的方法,这个方法是在onCreateView之前调用的,所以在这个方法里面可以做一些处理.
废话不多说,直接上代码.
public abstract class BaseFragment extends Fragment {
protected boolean isVisiable=false;
private boolean isFinish = false;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_base, container, false);
initView(); //这里初始化控件
isFinish = true; //初始化完成标识
onLazy();
return view;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(getUserVisibleHint()){
isVisiable=true;
onVisiable();
}else{
isVisiable=false;
onInvisiable();
}
}
protected void onVisiable() {
//若不可见 或 还没初始化完成
if (isVisiable
&& isFinish) {
onLazy();
}
}
protected abstract void onLazy();
protected void onInvisiable() {
}
}
这里的isVisiable作为protected类型,也就是子类中也会出现,同理也可以知道其他protected 类型的也是可以在子类中直接调用的.
这里的onLazy()就是懒加载数据的地方,回到子类中,代码如下:
@Override
protected void onLazy() {
// TODO: 2017.3.11 加载数据
}
Fragment的懒加载就这么简单