BaseFragment
2019-01-23 本文已影响0人
红茶炒饭
在此之前推荐一篇博客
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;
}
}
}