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