统一事件编程模型

接着上次为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();
    }
});

上面的代码有以下两个优点:

  1. 直接在btTest这个按钮对象上增加点击事件,是面向对象的写法;
  2. 将onclick方法的实现,封装成单独的方法,代码如下
private void gotoLoginActivity() {
        Intent intent = new Intent(this, LoginActivity.class);
        startActivity(intent);
    }

这样onclick()方法就不会那么臃肿了,代码也会清晰很多。

你可能感兴趣的:(统一事件编程模型)