在以前的省赛代码中曾看见过 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 风格支持的更好.