BaseActivity 存在的意义
定义子类的行为,成为一个模板告诉你的子类责任是什么
将子类要用的东西封装好,给子类调用,避免重复代码
限制其项目组的代码规范,统一风格
统一UI
1.定义子类的行为,成为一个模板告诉你的子类责任是什么
一、Activity的行为
接受上个Activity传过来的值
填充布局
初始化View
初始化数据,连接网络拉取json
在Oncreate里面使用四个抽象方法
/**
* 填充布局
* @param savedInstanceState
*/
protected abstract void InflateLayout(Bundle savedInstanceState);
/**
* 初始化Intent传过来的值
*/
protected abstract void initVariable();
/**
* 初始化View
*/
protected abstract void initView();
/**
* 初始化ViewData
*/
protected abstract void initData();
2.将子类要用的东西封装好,给子类调用,避免重复代码
子类要用mContext mActivity
Oncreate启动的时候要在堆栈添加,在finish的时候remove
跳转Activity,带参数的跳转
ShowToast();
一、子类要用mContext mActivity
/**
* 代替this
*/
protected Activity mActivity;
/**
* 代替Context
*/
private Context mContext;
mActivity=BaseActivity.this;
mContext=BaseActivity.this;
二、Oncreate启动的时候要在堆栈添加,在finish的时候remove
BaseAppManager.getInstance().addActivity(this);
@Override
public void finish() {
super.finish();
BaseAppManager.getInstance().removeActivity(this);
}
三、跳转Activity,带参数的跳转
/**
* startActivity
*
* @param clazz
*/
protected void readyGo(Class> clazz) {
Intent intent = new Intent(this, clazz);
startActivity(intent);
}
/**
* startActivity with bundle
*
* @param clazz
* @param bundle
*/
protected void readyGo(Class> clazz, Bundle bundle) {
Intent intent = new Intent(this, clazz);
if (null != bundle) {
intent.putExtras(bundle);
}
startActivity(intent);
}
/**
* startActivity then finish
*
* @param clazz
*/
protected void readyGoThenKill(Class> clazz) {
Intent intent = new Intent(this, clazz);
startActivity(intent);
finish();
}
/**
* startActivity with bundle then finish
*
* @param clazz
* @param bundle
*/
protected void readyGoThenKill(Class> clazz, Bundle bundle) {
Intent intent = new Intent(this, clazz);
if (null != bundle) {
intent.putExtras(bundle);
}
startActivity(intent);
finish();
}
/**
* startActivityForResult
*
* @param clazz
* @param requestCode
*/
protected void readyGoForResult(Class> clazz, int requestCode) {
Intent intent = new Intent(this, clazz);
startActivityForResult(intent, requestCode);
}
/**
* startActivityForResult with bundle
*
* @param clazz
* @param requestCode
* @param bundle
*/
protected void readyGoForResult(Class> clazz, int requestCode, Bundle bundle) {
Intent intent = new Intent(this, clazz);
if (null != bundle) {
intent.putExtras(bundle);
}
startActivityForResult(intent, requestCode);
}
四、 ShowToast();
/**
* show toast
*
* @param msg
*/
protected void showToast(View v, String msg) {
//防止遮盖虚拟按键
if (null != msg && !TextUtils.isEmpty(msg)) {
Snackbar.make(v, msg, Snackbar.LENGTH_SHORT).show();
}
}
3. 限制其项目组的代码规范,统一风格
父类实现点击事件,通过抽象方法统一在Onclick里面处理 然后提供抽象方法让自己实现
/**
* @param v
* 点击事件的初始化
*/
protected abstract void initClick(View v);