文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.3 统一事件编程模型
接上节,我们给按钮点击事件增加方法,如下所示:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论