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(); }