fragment数据的缓加载

2017-02-07  本文已影响0人  踏尘印沙

一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源。这时候我们需要继承并重写fragment的懒加载方法setUserVisibleHint,通过判断UI的可见性,设置当切换到某个fragment的时候是否加载数据。

基类

public abstract class LazyFragment extends Fragment {

protected boolean isVisible;

/**

* 在这里实现Fragment数据的缓加载.

* @param isVisibleToUser

*/

@Override

public void setUserVisibleHint(boolean isVisibleToUser) {

super.setUserVisibleHint(isVisibleToUser);

if(getUserVisibleHint()) {

isVisible = true;

onVisible();

} else {

isVisible = false;

onInvisible();

}

}

protected void onVisible(){

lazyLoad();

}

protected abstract void lazyLoad();

protected void onInvisible(){}

}

实现类

public class OpenResultFragment extends LazyFragment{

// 标志位,标志已经初始化完成。

private boolean isPrepared;

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

Log.d(LOG_TAG, "onCreateView");

View view = inflater.inflate(R.layout.fragment_open_result, container, false);

//XXX初始化view的各控件

isPrepared = true;

lazyLoad();

return view;

}

@Override

protected void lazyLoad() {

if(!isPrepared || !isVisible) {

return;

}

//填充各控件的数据

}

}

上一篇下一篇

猜你喜欢

热点阅读