package com.dl7.mvp.module.base;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.dl7.mvp.AndroidApplication;
import com.dl7.mvp.R;
import com.dl7.mvp.injector.components.ApplicationComponent;
import com.dl7.mvp.utils.SwipeRefreshHelper;
import com.dl7.mvp.widget.EmptyLayout;
import com.trello.rxlifecycle.LifecycleTransformer;
import com.trello.rxlifecycle.components.support.RxFragment;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by long on 2016/5/31.
* 碎片基类
*/
public abstract class BaseFragment<T extends IBasePresenter> extends RxFragment implements IBaseView, EmptyLayout.OnRetryListener {
/**
* 注意,资源的ID一定要一样
*/
@Nullable
@BindView(R.id.empty_layout)
EmptyLayout mEmptyLayout;
@Nullable
@BindView(R.id.swipe_refresh)
SwipeRefreshLayout mSwipeRefresh;
@Inject
protected T mPresenter;
protected Context mContext;
//缓存Fragment view
private View mRootView;
private boolean mIsMulti = false;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (mRootView == null) {
mRootView = inflater.inflate(attachLayoutRes(), null);
ButterKnife.bind(this, mRootView);
initInjector();
initViews();
initSwipeRefresh();
}
ViewGroup parent = (ViewGroup) mRootView.getParent();
if (parent != null) {
parent.removeView(mRootView);
}
return mRootView;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (getUserVisibleHint() && mRootView != null && !mIsMulti) {
mIsMulti = true;
updateViews(false);
}
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
if (isVisibleToUser && isVisible() && mRootView != null && !mIsMulti) {
mIsMulti = true;
updateViews(false);
} else {
super.setUserVisibleHint(isVisibleToUser);
}
}
@Override
public void showLoading() {
if (mEmptyLayout != null) {
mEmptyLayout.setEmptyStatus(EmptyLayout.STATUS_LOADING);
SwipeRefreshHelper.enableRefresh(mSwipeRefresh, false);
}
}
@Override
public void hideLoading() {
if (mEmptyLayout != null) {
mEmptyLayout.hide();
SwipeRefreshHelper.enableRefresh(mSwipeRefresh, true);
SwipeRefreshHelper.controlRefresh(mSwipeRefresh, false);
}
}
@Override
public void showNetError() {
if (mEmptyLayout != null) {
mEmptyLayout.setEmptyStatus(EmptyLayout.STATUS_NO_NET);
mEmptyLayout.setRetryListener(this);
}
}
@Override
public void onRetry() {
updateViews(false);
}
@Override
public <T> LifecycleTransformer<T> bindToLife() {
return this.<T>bindToLifecycle();
}
@Override
public void finishRefresh() {
if (mSwipeRefresh != null) {
mSwipeRefresh.setRefreshing(false);
}
}
/**
* 获取 ApplicationComponent
*
* @return ApplicationComponent
*/
protected ApplicationComponent getAppComponent() {
return AndroidApplication.getAppComponent();
// return ((MvpApplication) getActivity().getApplication().get).getAppComponent();
}
/**
* 初始化 Toolbar
*
* @param toolbar
* @param homeAsUpEnabled
* @param title
*/
protected void initToolBar(Toolbar toolbar, boolean homeAsUpEnabled, String title) {
((BaseActivity)getActivity()).initToolBar(toolbar, homeAsUpEnabled, title);
}
/**
* 初始化下拉刷新
*/
private void initSwipeRefresh() {
if (mSwipeRefresh != null) {
SwipeRefreshHelper.init(mSwipeRefresh, new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
updateViews(true);
}
});
}
}
/**
* 绑定布局文件
* @return 布局文件ID
*/
protected abstract int attachLayoutRes();
/**
* Dagger 注入
*/
protected abstract void initInjector();
/**
* 初始化视图控件
*/
protected abstract void initViews();
/**
* 更新视图控件
* @param isRefresh 新增参数,用来判断是否为下拉刷新调用,下拉刷新的时候不应该再显示加载界面和异常界面
*/
protected abstract void updateViews(boolean isRefresh);
}