package cn.bingoogolapple.media.ui.fragment;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.LayoutRes;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import cn.bingoogolapple.media.App;
import cn.bingoogolapple.media.ui.activity.BaseActivity;
import cn.bingoogolapple.titlebar.BGATitlebar;
/**
* 作者:王浩 邮件:bingoogolapple@gmail.com
* 创建时间:15/9/2 下午10:57
* 描述:
*/
public abstract class BaseFragment extends Fragment implements View.OnClickListener {
protected String TAG;
protected App mApp;
protected View mContentView;
protected BGATitlebar mTitlebar;
protected BaseActivity mActivity;
@Override
public void onAttach(Context context) {
super.onAttach(context);
TAG = this.getClass().getSimpleName();
mApp = App.getInstance();
}
public void onAttach(Activity activity) {
super.onAttach(activity);
mActivity = (BaseActivity) activity;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
onUserVisible();
} else {
onUserInVisible();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// 避免多次从xml中加载布局文件
if (mContentView == null) {
initView(savedInstanceState);
setListener();
processLogic(savedInstanceState);
} else {
ViewGroup parent = (ViewGroup) mContentView.getParent();
if (parent != null) {
parent.removeView(mContentView);
}
}
return mContentView;
}
protected void setContentView(@LayoutRes int layoutResID) {
mContentView = LayoutInflater.from(mApp).inflate(layoutResID, null);
}
/**
* 查找View
*
* @param id 控件的id
* @param <VT> View类型
* @return
*/
protected <VT extends View> VT getViewById(@IdRes int id) {
return (VT) mContentView.findViewById(id);
}
/**
* 初始化View控件
*/
protected abstract void initView(Bundle savedInstanceState);
/**
* 给View控件添加事件监听器
*/
protected abstract void setListener();
/**
* 处理业务逻辑,状态恢复等操作
*
* @param savedInstanceState
*/
protected abstract void processLogic(Bundle savedInstanceState);
/**
* 当fragment对用户可见时,会调用该方法,可在该方法中懒加载网络数据
*/
public void onUserVisible() {
}
/**
* 当fragment对用户不可见时,会调用该方法
*/
public void onUserInVisible() {
}
/**
* 需要处理点击事件时,重写该方法
*
* @param v
*/
public void onClick(View v) {
}
}