Android ViewPager + Fragment懒加载

来源:互联网 发布:打破刚性兑付 知乎 编辑:程序博客网 时间:2024/05/18 02:47

ViewPager + Fragment懒加载

  • 就是对于很多的viewpager+fragment而言,viewpager每次都会预加载很多个fragment,若是fragment内数据操作十分复杂和耗时的话,就会导致大量的浪费内存问题。
  • 所以我们先编写一个BaseFragment,以方便作为基类,之后的子类就容易写了.
  • 主要是知道了Fragment源码里面有一个setUserVisibleHint的方法,这个方法是在onCreateView之前调用的,所以在这个方法里面可以做一些处理.

  • 废话不多说,直接上代码.

public abstract class BaseFragment extends Fragment {    protected boolean isVisiable=false;    @Override    public void setUserVisibleHint(boolean isVisibleToUser) {        super.setUserVisibleHint(isVisibleToUser);        if(getUserVisibleHint()){            isVisiable=true;            onVisiable();        }else{            isVisiable=false;            onInvisiable();        }    }    protected void onVisiable() {        onLazy();    }    protected abstract void onLazy();    protected void onInvisiable() {    }}
  • 这里的isVisiable作为protected类型,也就是子类中也会出现,同理也可以知道其他protected 类型的也是可以在子类中直接调用的.
  • 这里的onLazy()就是懒加载数据的地方,回到子类中,代码如下:

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    protected void onLazy() {        //若不可见 或 还没初始化完成        if (!isVisiable || !isFinish) {            return;        }        // TODO: 2017.3.11 加载数据    }

Fragment的懒加载就这么简单

0 0