BaseFragment 解决ViewPager预加载问题

来源:互联网 发布:nokia n9 软件下载 编辑:程序博客网 时间:2024/06/05 16:55
package com.lisn.bdmapplugin.CityOffline;import android.os.Bundle;import android.support.v4.app.Fragment;import android.text.TextUtils;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * 若把初始化内容放到initData实现,就是采用Lazy方式加载的Fragment * 若不需要Lazy加载则initData方法内留空,初始化内容放到initViews即可 * - * -注1: 如果是与ViewPager一起使用,调用的是setUserVisibleHint。 * ------可以调用mViewPager.setOffscreenPageLimit(size),若设置了该属性 则viewpager会缓存指定数量的Fragment * -注2: 如果是通过FragmentTransaction的show和hide的方法来控制显示,调用的是onHiddenChanged. * -注3: 针对初始就show的Fragment 为了触发onHiddenChanged事件 达到lazy效果 需要先hide再show */public abstract class BaseFragment extends Fragment {    protected String fragmentTitle;             //fragment标题    private boolean isVisible;                  //是否可见状态    private boolean isPrepared;                 //标志位,View已经初始化完成。    private boolean isFirstLoad = true;         //是否第一次加载    protected LayoutInflater inflater;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        this.inflater = inflater;        isFirstLoad = true;        View view = initView(inflater, container, savedInstanceState);        isPrepared = true;        lazyLoad();        return view;    }    /** 如果是与ViewPager一起使用,调用的是setUserVisibleHint */    @Override    public void setUserVisibleHint(boolean isVisibleToUser) {        super.setUserVisibleHint(isVisibleToUser);        if (getUserVisibleHint()) {            isVisible = true;            onVisible();        } else {            isVisible = false;            onInvisible();        }    }    /**     * 如果是通过FragmentTransaction的show和hide的方法来控制显示,调用的是onHiddenChanged.     * 若是初始就show的Fragment 为了触发该事件 需要先hide再show     */    @Override    public void onHiddenChanged(boolean hidden) {        super.onHiddenChanged(hidden);        if (!hidden) {            isVisible = true;            onVisible();        } else {            isVisible = false;            onInvisible();        }    }    protected void onVisible() {        lazyLoad();    }    protected void onInvisible() {    }    protected void lazyLoad() {        if (!isPrepared || !isVisible || !isFirstLoad) {            return;        }        isFirstLoad = false;        initData();    }    protected abstract View initView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);    protected abstract void initData();    public String getTitle() {        return TextUtils.isEmpty(fragmentTitle) ? "" : fragmentTitle;    }    public void setTitle(String title) {        fragmentTitle = title;    }}

0 0
原创粉丝点击