统一事件编程模型
2016-05-31 本文已影响94人
looper1211
接着上次为Activity定义新的生命周期讲的继续说,现在给按钮添加一个点击事件,代码如下
public class MainActivity extends BaseActivity implements OnClickListener {
@Override
protected void initViews(Bundle saveInstanceState) {
setContentView(R.layout.activity_main);
Button btTest = $(R.id.bt_test);
btTest.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_test:
Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
break;
default:
break;
}
}
相信好多人都是这么些代码的,不能说不对,但反对这么些,看那个onClick方法,里面要使用switch...case...语句对R.id.bt_test的值进行判断,R这个类就会在程序中反复出现,这回扰乱面向对象的编程风格,不如在initViews方法中一次性把所有控件都初始化了,不要在频繁使用R.id了
Android中还有另以一种事件编程方式,代码如下
Button btTest = $(R.id.bt_test);
btTest.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
gotoLoginActivity();
}
});
上面的代码有以下两个优点:
- 直接在btTest这个按钮对象上增加点击事件,是面向对象的写法;
- 将onclick方法的实现,封装成单独的方法,代码如下
private void gotoLoginActivity() {
Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
}
这样onclick()方法就不会那么臃肿了,代码也会清晰很多。