返回介绍

1.3 统一事件编程模型

发布于 2024-08-17 23:46:12 字数 1562 浏览 0 评论 0 收藏 0

接上节,我们给按钮点击事件增加方法,如下所示:

public class LoginActivity extends Activity 
    implements View.OnClickListener {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // 以上省略一些无关代码
    // 登录事件
    Button btnLogin = (Button) findViewById(
        R.id.sign_in_button);
    btnLogin.setOnClickListener(this);
    // 以上省略一些无关代码
  }
  @Override
  public void onClick(View view) {
    switch (view.getId()) {
    case R.id.sign_in_button:
      Intent intent = new Intent(LoginActivity.this,
          PersonCenterActivity.class);
      startActivity(intent);
    }
  }

很多公司、很多团队、很多程序员都是这样写代码的,也不能说不对。但我反对这样写的原因是,大家看那个onClick方法,里面要使用switch…case…语句来对R.id.btnNext中的值进行判断,我不希望R这个类在程序中反复出现,这会扰乱面向对象编程的风格,按照我的设想,我们在initViews方法中一次性把所有的控件都初始化了,今后就再也不会使用R.id了。

Android中还有另一种事件编程方式,如下所示:

// 登录事件
btnLogin = (Button)findViewById(R.id.sign_in_button);
btnLogin.setOnClickListener(
  new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      gotoLoginActivity();
    }
  });

这是我比较推崇的方式,有以下两个优点:

1)直接在btnLogin这个按钮对象上增加点击事件,是面向对象的写法。

2)将onClick方面的实现,封装成一个gotoLoginActivity方法,如下所示:

private void gotoLoginActivity() {
  Intent intent = new Intent(LoginNewActivity.this, 
    PersonCenterActivity.class);
  startActivity(intent);
}

这样onClick事件方法就不那么臃肿了。设想当我们在initViews方法中声明了10个按钮对象,并都给它们挂上不同的点击方法,那么initViews方法该有多少行代码呢?我写过上千行的,直接感受就是initViews方法很难维护。但是我们把这些点击方法都分别封装到私有方法中,代码就清晰多了。

但是,只要在一个团队内部达成了协议,决定使用某种事件编程方式,所有开发人员就要按照同样的方式编写代码。我认为这是没错的。只要不是各有各的编码风格就好。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文