Android-Button点击事件的四种写法

时间:2022-07-21 22:35:23

工具:Android Studio 2.2.2
水平:新手

  • 新建一个名为ButtonClick工程。

  • 布局很简单,设置一个id为button的Button即可。

<Button
android:id="@+id/button"
android:text="@string/btn_clickme"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

1.匿名内部类

public class MainActivity extends AppCompatActivity {

private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

button = (Button)findViewById(R.id.button);

//第一种方法-匿名内部类
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button:
Toast.makeText(MainActivity.this,"第一种方式",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
});

}

}

2.自定义监听类

//第二种方法-自定义点击事件监听类
class MyButtonClickLinstener implements View.OnClickListener{
@Override
public void onClick(View v){
switch (v.getId()) {
case R.id.button:
Toast.makeText(MainActivity.this, "第二种方式", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
}
  • 调用的时候直接new。

button.setOnClickListener(new MyButtonClickLinstener());

3.Activity继承View.OnClickListener

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
}

  • 绑定的时候,直接使用this

    button.setOnClickListener(this);


写个onClick方法,不用加@Override
public void onClick(View v){
switch (v.getId()){
case R.id.button:
Toast.makeText(MainActivity.this,"第三种方式",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}

4.使用android:onClick的属性

**在布局文件中修改Button的onClick属性为onClick。**

android:onClick=”onClick”

  • 不需要setOnClickListener方法了。直接使用第三种方法的onClick方法即可。

android:onClick绑定的是一个方法,方法名可以自定义,如testClick,然后在ManiActivity里写testClick方法。

public void testClick(View v){
switch (v.getId()){
case R.id.button:
Toast.makeText(MainActivity.this,"我也是第四种方式",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}

小结:

  • 当按钮较少时,可以使用第一种和第二种写法。
  • 当按钮较多时,可以使用第三种,方便。
  • 第四种很灵活。

5.参考资料:

[1].http://www.jb51.net/article/55329.htm

[2].http://blog.csdn.net/a9529lty/article/details/7542828/