Android按钮单击事件的四种常用写法总结
程序员文章站
2022-04-30 23:18:25
很多学习android程序设计的人都会发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同。因此本文就把这些写法总结一下,比较下各种写法的优劣,希...
很多学习android程序设计的人都会发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同。因此本文就把这些写法总结一下,比较下各种写法的优劣,希望对大家灵活地选择编码方式可以有一定的参考借鉴价值。
xml文件代码如下:
<button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button1" /> <button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button2" />
四种方法分述如下:
匿名内部类:
public class testbuttonactivity extends activity { button btn1, btn2; toast tst; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_test_button); btn1 = (button) findviewbyid(r.id.button1); btn2 = (button) findviewbyid(r.id.button2); btn1.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { // todo auto-generated method stub toast tst = toast.maketext(testbuttonactivity.this, "111111111", toast.length_short); tst.show(); } }); btn2.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { // todo auto-generated method stub toast tst = toast.maketext(testbuttonactivity.this, "222222222", toast.length_short); tst.show(); } }); } }
自定义单击事件监听类:
public class testbuttonactivity extends activity { button btn1, btn2; toast tst; class myclicklistener implements onclicklistener { @override public void onclick(view v) { // todo auto-generated method stub switch (v.getid()) { case r.id.button1: tst = toast.maketext(testbuttonactivity.this, "111111111", toast.length_short); tst.show(); break; case r.id.button2: tst = toast.maketext(testbuttonactivity.this, "222222222", toast.length_short); tst.show(); break; default: break; } } } @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_test_button); btn1 = (button) findviewbyid(r.id.button1); btn2 = (button) findviewbyid(r.id.button2); btn1.setonclicklistener(new myclicklistener()); btn2.setonclicklistener(new myclicklistener()); } }
activity继承view.onclicklistener,由activity实现onclick(view view)方法,在onclick(view view)方法中用switch-case对不同id代表的button进行相应的处理
public class testbuttonactivity extends activity implements onclicklistener { button btn1, btn2; toast tst; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_test_button); btn1 = (button) findviewbyid(r.id.button1); btn2 = (button) findviewbyid(r.id.button2); btn1.setonclicklistener(this); btn2.setonclicklistener(this); } @override public void onclick(view v) { // todo auto-generated method stub switch (v.getid()) { case r.id.button1: tst = toast.maketext(this, "111111111", toast.length_short); tst.show(); break; case r.id.button2: tst = toast.maketext(this, "222222222", toast.length_short); tst.show(); break; default: break; } } }
最后一种是我今天看到的一种写法,在xml文件中“显示指定按钮的onclick属性,这样点击按钮时会利用反射的方式调用对应activity中的click()方法”
<button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onclick="onclick" android:text="button1" /> <button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onclick="onclick" android:text="button2" />
这里在输完android:的时候按下 alt+/ 会有 onclick 属性的提示, 但输入到 android:onclick=“ 的地方按下 alt+/ 并没有提示 onclick 选项,让我突然觉得这里好像有点问题。
public class testbuttonactivity extends activity { button btn1, btn2; toast tst; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_test_button); } // 注意 这里没有 @override 标签 public void onclick(view v) { // todo auto-generated method stub switch (v.getid()) { case r.id.button1: tst = toast.maketext(this, "111111111", toast.length_short); tst.show(); break; case r.id.button2: tst = toast.maketext(this, "222222222", toast.length_short); tst.show(); break; default: break; } } }
这种写法整个代码中都不用声明button就可以实现button的单击事件。
以上就是四种实现按钮单击事件的方法。
粗略总结一下,就是按钮少的时候用匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类的。
按钮多的情况我还是选择第三种方法,方便。
关于第四种方法,我感觉最方便,但看了很多代码还是觉得写法不够大众化,感兴趣的朋友可以对此研究研究。相信会有不少收获。
希望本文所述对大家android程序设计的学习有所帮助。