package me.weyye.todaynews.base; import android.app.Activity; import android.content.Intent; 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.Toast; import com.orhanobut.logger.Logger; import me.weyye.todaynews.model.Notice; import me.weyye.todaynews.utils.RxBus; import rx.Observable; import rx.Subscription; /** * Created by Administrator on 2016/8/4 0004. */ public abstract class BaseFragment extends Fragment { protected Activity mContext; protected boolean mIsFirstVisible = true; protected View rootView; protected Subscription mSubscription; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return loadViewLayout(inflater, container); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mContext = getActivity(); rootView = view; initView(view); boolean isVis = isHidden() || getUserVisibleHint(); if (isVis && mIsFirstVisible) { lazyLoad(); mIsFirstVisible = false; } } @Override public void onDestroy() { super.onDestroy(); if (mSubscription != null) mSubscription.unsubscribe(); } /** * 获取控件 * * @param id 控件的id * @param <E> * @return */ protected <E extends View> E get(int id) { return (E) rootView.findViewById(id); } @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (!hidden) { onVisible(); } else { onInVisible(); } } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { onVisible(); } else { onInVisible(); } } /** * 当界面可见时的操作 */ protected void onVisible() { if (mIsFirstVisible && isResumed()) { lazyLoad(); mIsFirstVisible = false; } } /** * 数据懒加载 */ protected void lazyLoad() { } /** * 当界面不可见时的操作 */ protected void onInVisible() { } /** * 初始化界面 * * @param view */ private void initView(View view) { bindViews(view); processLogic(); setListener(); } /** * 加载布局 */ protected abstract View loadViewLayout(LayoutInflater inflater, ViewGroup container); /** * find控件 * * @param view */ protected abstract void bindViews(View view); /** * 处理数据 */ protected abstract void processLogic(); /** * 设置监听 */ protected abstract void setListener(); /** * 界面跳转 * * @param tarActivity */ protected void intent2Activity(Class<? extends Activity> tarActivity) { Intent intent = new Intent(mContext, tarActivity); startActivity(intent); } /** * 显示Toast * * @param msg */ protected void showToast(String msg) { Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT).show(); } protected void showLog(String msg) { Logger.i(msg); } /** * 注册事件通知 */ public Observable<Notice> toObservable() { return RxBus.getDefault().toObservable(Notice.class); } /** * 发送消息 */ public void post(Notice msg) { RxBus.getDefault().post(msg); } }