Fragment实现懒加载以及简单封装

来源:互联网 发布:色容差计算软件 编辑:程序博客网 时间:2024/06/11 03:32

首先是实现懒加载的Fragment

public abstract class LazyLoadFragment extends Fragment{    protected boolean isViewInitiated;    protected boolean isVisibleToUser;    protected boolean isDataInitiated;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }    @Override    public void onActivityCreated(Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        isViewInitiated = true;        prepareFetchData();    }    @Override    public void setUserVisibleHint(boolean isVisibleToUser) {        super.setUserVisibleHint(isVisibleToUser);        this.isVisibleToUser = isVisibleToUser;        prepareFetchData();    }    //网络请求在这里进行    public abstract void fetchData();    public boolean prepareFetchData() {        return prepareFetchData(false);    }    public boolean prepareFetchData(boolean forceUpdate) {        /**         * 当前fragment对用户可见并且已经初始化并且还未加载数据         * 则调用fetchData方法,即在可这里进行网络加载数据         * 加载数据后使isDataInitiated为false确保不重复加载数据         */        if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) {            fetchData();            isDataInitiated = true;            return true;        }        return false;    }    protected Fragment getRootFragment() {        Fragment fragment = getParentFragment();        while (fragment.getParentFragment() != null) {            fragment = fragment.getParentFragment();        }        return fragment;    }}

BaseFragment

public abstract class BaseFragment extends LazyLoadFragment{    protected View rootView;    private Intent intent;    //获取fragment布局文件ID    protected abstract int setLayoutId();    //进行初始化的方法    protected abstract void init(View view, Bundle savedInstanceState);    @Override    public void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setHasOptionsMenu(true);    }    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        if (rootView == null){            rootView = inflater.inflate(setLayoutId(), container, false);            ButterKnife.bind(this, rootView);            init(rootView, savedInstanceState);        }        return rootView;    }    @Override    public void onDestroyView() {        super.onDestroyView();        ((ViewGroup) rootView.getParent()).removeView(rootView);    }    protected void ChangeActivity(Class<?> cls,boolean isFinish){        intent = new Intent(getActivity(),cls);        startActivity(intent);        if (isFinish) getActivity().finish();    }}

使用

public class DemoFragment extends BaseFragment {    @Override    protected int setLayoutId() {        //这里直接返回fragment的布局文件id即可        return 0;    }    @Override    protected void init(View view, Bundle savedInstanceState) {        //这里进行初始化操作    }    @Override    public void fetchData() {        //这里进行网络请求    }}
0 0
原创粉丝点击