美文网首页
fragment数据的缓加载

fragment数据的缓加载

作者: 踏尘印沙 | 来源:发表于2017-02-07 10:38 被阅读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;

    }

    //填充各控件的数据

    }

    }

    相关文章

      网友评论

          本文标题:fragment数据的缓加载

          本文链接:https://www.haomeiwen.com/subject/iqmpittx.html