package com.llf.basemodel.base;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
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;
import android.widget.TextView;
import com.llf.basemodel.R;
import com.llf.basemodel.dialog.DialogTools;
import com.llf.basemodel.utils.ToastUtil;
import butterknife.ButterKnife;
import rx.Subscription;
import rx.subscriptions.CompositeSubscription;
/**
* Created by llf on 2017/3/1.
* 基础的Fragment
*/
public abstract class BaseFragment extends Fragment {
private boolean isViewPrepared; // 标识fragment视图已经初始化完毕
private boolean hasFetchData; // 标识已经触发过懒加载数据
private CompositeSubscription mSubscriptions;
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(getLayoutId(), container, false);
ButterKnife.bind(this, rootView);
this.initView();
isViewPrepared = true;
return rootView;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
lazyFetchDataIfPrepared();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
lazyFetchDataIfPrepared();
}
private void lazyFetchDataIfPrepared() {
if (isViewPrepared && getUserVisibleHint() && !hasFetchData) {
lazyFetchData();
hasFetchData = true;
}
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void onStop() {
super.onStop();
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
@Override
public void onDestroy() {
super.onDestroy();
ButterKnife.unbind(this);
hasFetchData = false;
isViewPrepared = false;
if (mSubscriptions != null) {
mSubscriptions.clear();
}
BaseApplication.getRefWatcher(getActivity()).watch(this);
}
@Override
public void onDetach() {
super.onDetach();
}
/**
* 通过Class跳转界面
**/
public void startActivity(Class<?> cls) {
startActivity(cls, null);
}
/**
* 含有Bundle通过Class跳转界面
**/
public void startActivity(Class<?> cls, Bundle bundle) {
Intent intent = new Intent(getActivity(), cls);
if (bundle != null) {
intent.putExtras(bundle);
}
startActivity(intent);
}
/**
* 通过Class跳转界面
**/
public void startActivityForResult(Class<?> cls, int requestCode) {
startActivityForResult(cls, null, requestCode);
}
/**
* 含有Bundle通过Class跳转界面
**/
public void startActivityForResult(Class<?> cls, Bundle bundle, int requestCode) {
Intent intent = new Intent(getActivity(), cls);
if (bundle != null) {
intent.putExtras(bundle);
}
startActivityForResult(intent, requestCode);
}
/**
* 跳转界面并关闭当前界面
*
* @param clazz 目标Activity
*/
protected void startThenKill(Class<?> clazz) {
startThenKill(clazz, null);
}
/**
* @param clazz 目标Activity
* @param bundle 数据
*/
protected void startThenKill(Class<?> clazz, Bundle bundle) {
startActivity(clazz, bundle);
getActivity().finish();
}
/**
* 开启加载效果
*/
public void startProgressDialog() {
DialogTools.showWaittingDialog(getActivity());
}
/**
* 关闭加载
*/
public void stopProgressDialog() {
DialogTools.closeWaittingDialog();
}
/**
* 显示错误的dialog
*/
public void showErrorHint(String errorContent) {
View errorView = LayoutInflater.from(getActivity()).inflate(R.layout.app_error_tip,null);
TextView tvContent = (TextView)errorView.findViewById(R.id.content);
tvContent.setText(errorContent);
new ToastUtil(errorView);
}
/**
* 显示普通的toast
*
* @return
*/
public void showToast(String str) {
ToastUtil.sToastUtil.shortDuration(str).setToastBackground(Color.WHITE, R.drawable.toast_radius).show();
}
protected void addSubscription(Subscription subscription) {
if (subscription == null) return;
if (mSubscriptions == null) {
mSubscriptions = new CompositeSubscription();
}
mSubscriptions.add(subscription);
}
protected abstract int getLayoutId();
protected abstract void initView();
protected abstract void lazyFetchData();
}