直接看代码:
package com.norma.note;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import com.orhanobut.logger.Logger;
import butterknife.ButterKnife;
public abstract class BaseActivity extends AppCompatActivity
{
//为了不重复的编写ButterKnife.bind(this);
@Override
public void setContentView(int layoutResID)
{
super.setContentView(layoutResID);
ButterKnife.bind(this);
}
//为了不重复的编写ButterKnife.bind(this);
@Override
public void setContentView(View view)
{
super.setContentView(view);
ButterKnife.bind(this);
}
//为了不重复的编写ButterKnife.bind(this);
@Override
public void setContentView(View view, ViewGroup.LayoutParams params)
{
super.setContentView(view, params);
ButterKnife.bind(this);
}
//初始化Activity(编写所有的Activity都需要初始化的内容)
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//这个方法在这里被全部重写了,包括它全部的重载
setContentView(getResLayout());
//初始化日志工具
initLogger();
initActivity();
}
//代替onCreate成为个性化的初始化工具,在继承之后可以被实现
protected abstract void initActivity();
//初始化日志工具,如果你也使用Logger的话
private void initLogger()
{
Logger.init("logs");
Logger.t(this.getClass().getName());
}
//必须被实现,因为onCreate需要调用它获得布局文件的id
//实现之后你需要把他的返回值设置为当前Activity的R.Layout.XXX
public abstract int getResLayout();
}
1.如果你想要用Butterknife请重写setContentView方法,三个重载都要重写,指不定会什么时候用到
2.如果你想让MianActivity等Activity中连OnCreate都没有,那就重写OnCreate,通过实现这里定义的getResLayout方法,传入布局R.layout.XXX给OnCreate
3.编写initActivity是为了方便你初始化某些变量,这样你就:不会因为没有OnCreate而烦恼;也不用总是看见它的重复代码
注意:initActivity可以不写为抽象方法,因为,你不一定会用到它,我一会去改自己的代码。