BaseFragment

2019-01-23  本文已影响0人  红茶炒饭

在此之前推荐一篇博客

fragment这一篇就够了

public abstract class BaseFragment<T extends BasePresenter> extends Fragment {

    public AppCompatActivity mActivity;    //提供一个全局化的context

    protected String TAG = "";

    protected boolean isinitData = false; //是否加载了数据

    public View rootView;

    private T mBasePresenter;

    private StatusView statusView;

    //oncreate方法
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TAG = getClass().getSimpleName();     //getName ----“实体名称”      getSimpleName ---- “底层类简称” ---- Main
    }

    //onAttach方法
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mActivity = (AppCompatActivity) context;
        mBasePresenter = initPresenter();
    }

    //oncreateview方法
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        rootView = inflater.inflate(initLayoutId(), container, false);  //为fragment 添加核心布局
        statusView = initStatuView(rootView);    //调用加载布局
        initVarisble();  //初始化变量
        initView();      //初始化布局
        return statusView;
    }


    //onActivityCreate方法
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        initListener();    //事件监听

         /* 界面变为可见时,调用setUserVisibleHint(true)
            界面变为不可见时,调用setUserVisibleHint(false)
            */
        if (!isinitData && getUserVisibleHint()) {   //isinitDat取非 只有变为了 ture and 当前页面可见   第一次会执行这个


            if (statusView != null) {  //如果 startusView 不为空

                initData();          //加载数据

                isinitData = true;   //并且 将isinitData 变为true
            }

        } else {    //否则
            onVisiable();
        }

    }
    
  //失败页面
    private StatusView initStatuView(View content) {
        StatusView.Builder builder = new StatusView.Builder(mActivity);
        statusView = builder.contentView(content)
                .emptyId(R.layout.layout_empity2)
                .erroryId(R.layout.layout_error)
                .loadingId(R.layout.layout_loading)
                .build();
        return statusView;
    }
        
        /*
        初始化控件
        */
    public abstract void initView();
        
        /*
        点击事件
        */
    public abstract void initListener();
        
        /*
        赋值
        */
    public abstract void initData();
        
        /*
        设置布局
        */
    public abstract int initLayoutId();
        
        
    public abstract T initPresenter();

    //初始化变量
    public abstract void initVarisble();

    public T getPresenter() {
        return mBasePresenter;
    }



    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        //参数: 如果是 true 即代表fragment 变为可见   反之 false 代表fragment 变得不可见
        if (isVisibleToUser) {
            if (rootView != null) { //如果当前的 fragment 变得可见 而且有不为空
                if (!isinitData) {  //如果当前的
                    initData();
                    isinitData = true;
                } else {
                    onVisiable();
                }
            }
        }
    }

    protected void onVisiable() {

    }

    //显示内容
    public void showContent() {
        statusView.showContent();
    }

    //显示加载布局
    public void showloading() {
        statusView.showLoading();
    }

    //显示空白布局
    public void showEmpty() {
        statusView.showEmpty();
    }

    @Override
    public void onDetach() {
        super.onDetach();
        if (mActivity != null) {
            mActivity = null;
        }
    }
}

上一篇 下一篇

猜你喜欢

热点阅读