在设置Button按钮的点击事件onClick时,发现有多种方法使用,网上查看了一些博主写的帖子,发现不是非常完整,这里补充说明一下。
方法一:Button对象调用setOnClickListener,setOnClickListener中new OnClickListener接口作为参数传入,OnClickListener中重写onClick方法
该方法适合单个或少量控件设置点击事件,使用比较灵活。
示例代码:
public class ButtonClickActivity extends AppCompatActivity {
private Button btn_click;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_click);
btn_click = findViewById(R.id.btn_click);
btn_click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//do something after click
Toast.makeText(getApplicationContext(),"我被点击了",Toast.LENGTH_SHORT).show();
}
});
}
}
方法二:自定义内部类实现OnClickListener接口,并重写onClick方法,通过setOnClickListener实现
该方法同样适合单个或少量控件设置点击事件,自定义类也可以用于实现其他方法。
示例代码:
public class ButtonClickActivity extends AppCompatActivity{
private Button btn_click;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_click);
btn_click = findViewById(R.id.btn_click);
btn_click.setOnClickListener(new MyOnClickListener());
}
private class MyOnClickListener implements View.OnClickListener{
@Override
public void onClick(View view) {
//do something after click
}
}
}
方法三、自定义OnClickListener接口对象,并重写onClick方法,通过setOnClickListener实现
该方法和方法三类似,适合于单个或少量控件设置点击事件。
示例代码:
public class ButtonClickActivity extends AppCompatActivity {
private Button btn_click;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_click);
btn_click = findViewById(R.id.btn_click);
btn_click.setOnClickListener(listener);
}
private View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
//do something after click
}
};
}
方法四:类implement接口OnClickListener,类中重写的OnClickListener接口的onClick方法
该方法适合多个控件都设置点击事件。
示例代码:
public class ButtonClickActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_click;
private Button btn_click2;
private Button btn_click3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_click);
btn_click = findViewById(R.id.btn_click);
btn_click2 = findViewById(R.id.btn_click2);
btn_click3 = findViewById(R.id.btn_click3);
btn_click.setOnClickListener(this);
btn_click2.setOnClickListener(this);
btn_click3.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.btn_click){
//do something after click
}else if(view.getId() == R.id.btn_click2){
//do something after click
}else if(view.getId() == R.id.btn_click3){
//do something after click
}
}
}
五、在xml文件中对按钮添加 android:onClick=”xxx” 属性,在类中实现xxx方法
该方法同样适合单个或少量控件设置点击事件,优点是代码简洁。
示例代码:
布局文件代码:
<Button
android:id="@+id/btn_click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:text="点击事件"
android:layout_gravity="center"
android:textColor="@color/black"
android:textSize="22sp"
android:onClick="onClickButton"/> //onClickButton onClick方法
java代码:
public class ButtonClickActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_click);
}
public void onClickButton(View view){
//do something after click
}
}
注意:实现的onClickButton()方法是public的,且需要参数view。
总结:
Button所在的Activity需要继承Activity(或继承Activity的子类,如代码中的AppCompatActivity),一般在onCreate方法中对Button对象进行监听。。
前四种方法是通过View的setOnClickListener方法实现,前三种适合较少按钮时使用,第四种适合多个按钮时使用,最后一种是通过xml文件设置按钮onClick属性,并实现onClick对应的方法来实现,也适合较少按钮时使用。
参考文章:https://www.cnblogs.com/heixiang/p/10985842.html