BaseLasyFragment

来源:互联网 发布:税务师含金量知乎 编辑:程序博客网 时间:2024/05/29 11:14
/* * Created by z on 2017/9/15. */import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public abstract class BaseLazyFragment extends Fragment {    View v;    /** 第一次可见的标识 */    private boolean isFirstVisible = true;    /** 第一次不可见标识 */    private boolean isFirstInvisible = true;    /** 数据是否加载完成,由具体的子类来维护 */    protected boolean isLoaded = false;    /** 视图创建完成标识 */    private boolean isPrepared;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        initData();    }    @Override    public void setUserVisibleHint(boolean isVisibleToUser) {        super.setUserVisibleHint(isVisibleToUser);        // 我们只在视图创建完成后,调用视图是否可见的方法        if (isPrepared) {            if (isVisibleToUser) {                isFirstVisible();            } else {                isFirstInvisible();            }        }    }    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        if (getLayoutId() != 0) {            v = inflater.inflate(getLayoutId(), container, false);        } else {            v = super.onCreateView(inflater, container, savedInstanceState);        }        return v;    }    @Override    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {        super.onViewCreated(view, savedInstanceState);    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        // 视图准备完成        isPrepared = true;        // 视图是否可见        isVisibleToUser();        // 初始化视图数据        if (isLoaded()) {            initViewData();        }    }    @Override    public void onResume() {        super.onResume();        if (getUserVisibleHint()) {            onUserVisible();        }    }    @Override    public void onPause() {        super.onPause();        if (getUserVisibleHint()) {            onUserInvisible();        }    }    @Override    public void onDestroyView() {        super.onDestroyView();        // 视图销毁后将isPrepared重置        isPrepared = false;    }    private void isVisibleToUser() {        if (getUserVisibleHint()) {            isFirstVisible();        }    }    private void isFirstVisible() {        if (isFirstVisible) {            isFirstVisible = false;            onFirstUserVisible();        } else {            onUserVisible();        }    }    private void isFirstInvisible() {        if (isFirstInvisible) {            isFirstInvisible = false;            onFirstUserInvisible();        } else {            onUserInvisible();        }    }    private boolean isLoaded() {        return isLoaded;    }    public void loaded() {        isLoaded = true;    }    /**     * initialized data but view is not initialized     */    protected abstract void initData();    /**     * when view created for the first time,we can set data on the View     */    protected abstract void initViewData();    /**     * get LayoutId     * @return     */    public abstract int getLayoutId();    /**     * when fragment is visible for the first time, here we can do something Time-consuming operation like network access     */    protected abstract void onFirstUserVisible();    /**     * this method like the fragment's lifecycle method onResume()     */    protected abstract void onUserVisible();    /**     * when fragment is invisible for the first time     */    private void onFirstUserInvisible() {    }    /**     * this method like the fragment's lifecycle method onPause()     */    protected abstract void onUserInvisible();}
原创粉丝点击