fragment数据的缓加载

一个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;

}

//填充各控件的数据

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容