package com.ittianyu.pocenter.common.base; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.View; import android.widget.TextView; import com.ittianyu.mvp.lcee.Lcee; import com.ittianyu.mvp.lcee.MvpLceeFragment; import com.ittianyu.pocenter.R; import com.orhanobut.logger.Logger; import com.victor.loading.rotate.RotateLoading; /** * Created by yu on 2016/11/25. */ @Lcee(loadingViewId = R.id.v_loading, contentViewId = R.id.v_content, errorViewId = R.id.v_error, emptyViewId = R.id.v_empty) public abstract class BaseFragment<CV extends View, M, V extends BaseContract.View<M>, P extends BaseContract.Presenter<V>> extends MvpLceeFragment<CV, M, V, P> implements BaseContract.View<M> { protected boolean firstLoad = true; protected boolean prepared = false; protected boolean visible = false; @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); visible = isVisibleToUser; lazyLoad(); } /** * only load data at first visible */ private void lazyLoad() { if (visible && firstLoad && prepared) { firstLoad = false; loadData(false); } } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initView(view); showLoading(false); prepared = true; lazyLoad(); } /** * init view */ protected abstract void initView(View view); @Override protected String getErrorMessage(Throwable e, boolean pullToRefresh) { Logger.e(e, e.getMessage()); return pullToRefresh ? getString(R.string.failed_to_refresh) : getString(R.string.failed_to_load_click_to_reload); } @Override protected void onSetErrorViewText(View errorView, String errorMsg) { TextView tv = (TextView) errorView.findViewById(R.id.tv); tv.setText(errorMsg); } @Override public <T> T getApp() { return (T) getActivity().getApplication(); } @Override public void showLoading(boolean pullToRefresh) { super.showLoading(pullToRefresh); RotateLoading rotateLoading = (RotateLoading) this.loadingView.findViewById(R.id.rl); if (!rotateLoading.isStart()) rotateLoading.start(); } }