版权声明:https://blog.csdn.net/petterp https://blog.csdn.net/petterp/article/details/88924268
在以前的省赛代码中曾看见过 Activity的抽象模板类,上次在实际使用时,使用了单Activity+多Fragment来实现需求,也简单写了一个Fragment的模板类。昨天在比赛中,比赛的基类使用了 BaseActivity 实现抽象模板类。所以做个记录吧。
实现的写法很简单。附下面代码
模板类的写法,具体注释一看就懂
public abstract class BaseActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId());
initView();
initData();
TextView title=findViewById(R.id.title);
title.setText(getLayoutTitle());
findViewById(R.id.back).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onAfter();
}
});
}
//对应的布局文件
protected abstract int getLayoutId();
//初始化数据
protected abstract void initData();
//点击返回图标处理事件
protected abstract void onAfter();
//初始化控件
protected abstract void initView();
//页面标题
protected abstract String getLayoutTitle();
}
子活动的写法。
public class MainActivity extends BaseActivity {
@Override
protected int getLayoutId() {
return R.layout.activity_main;
}
@Override
protected void initData() {
}
@Override
protected void onAfter() {
}
@Override
protected void initView() {
}
@Override
protected String getLayoutTitle() {
return "主界面";
}
}
不过为什么叫模板类呢?
abstart 更多的是反映一种模板效果,而接口反映的是某种方法。
这里解释为什么BaseActivity要继承自FragmentActivity?
可以看见AppCompatActivity是继承于FragmentActivity.
FragmentActivity 继承自Activity,用来解决Android 3.0之前无法使用Fragment的问题,所以在使用的时候需要导入android-support-v4.jar兼容包,同时继承 FragmentActivity,这样在Activity中就能嵌入Fragment来实现你想要的布局效果。
而AppCompatActivity 继承自FragmentActivity,支持ActionBar,同时对 MD 风格支持的更好.
详细的解释可以参阅以下博客: