在单一设计模式里有一条原则:单一职责,一个类或方法,只做一件事情。
针对Activity,大多时候每次都会在OnCreate方法里进行加载布局、初始化相关变量、接受其他页面传递的Intent参数、请求网络等操作,我们可以把将其拆分成三个子方法,如下图:
针对这些子方法介绍如下:
- initVariables:初始化变量,包括获取Intent带的数据和Acivity内的变量
- initViews:加载layout布局,初始化控件,为控件添加监听事件
- loadData:调用相关API获取数据
于是可以在自己项目的类库,比如AndroidLib这个类库的BaseActivity中,重写onCreate方法:
public abstract class BaseActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
initVariable();
initViews(saveInstanceState);
loadData();
}
protected abstract void initVariable();
protected abstract void initViews(Bundle saveInstanceState);
protected abstract void loadData();
protected <T extends View> T $(int resId) {
return ViewUtils.findViewById(this, resId);
}
}
这三个方法都要声明为abstract的,从而要求所有子类必须实现这三个方法。这里多实现了一个加载布局控件的方法,具体请查考 重新学会findViewById 这篇文章。子类只需实现具体的操作方法即可,比如AndroidDemo的Activity就可以这么写:
public class MainActivity extends BaseActivity {
@Override
protected void initVariable() {
}
@Override
protected void initViews(Bundle saveInstanceState) {
setContentView(R.layout.activity_main);
TextView tvTest = $(R.id.tv_test);
Button btTest = $(R.id.bt_test);
}
@Override
protected void loadData() {
}
}