当前位置: 移动技术网 > 移动技术>移动开发>Android > Android按钮单击事件的四种常用写法总结

Android按钮单击事件的四种常用写法总结

2019年07月24日  | 移动技术网移动技术  | 我要评论

很多学习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程序设计的学习有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网