一, XML 绑定 onClick
属性(声明式)
适用场景:简单快速绑定,适合少量按钮或新手体验。
需要在button控件中指定onClick属性,这样可以在___Activity中定义来实现button控件的点击事件。
button控件内添加
关键代码:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:onClick="onClick"
android:text="方式一" />
activity内添加
关键代码:
public void onClick(View view) {
button.setText("您方式1点击按钮");
}
二,匿名内部类实现 OnClickListener
优点:直观灵活,无需考虑方法签名问题,适合临时绑定。
通过Button控件设置setOnClickListener()方法实现对Button控件点击事件的监听。SetOnClickListener()方法中传递的参数是一个匿名内部类。如果监听到按钮被点击,那么就会调用匿名内部类中的onClick方法实现对Button控件的点击事件。(大白话我的理解是,要定义类似于一个函数,然后调用函数的方法,但这样按钮的灵活性更加方便。)
Layout内随便定义一个Button:
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="方式二" />
activity内添加
关键代码:
public class MainActivity extends AppCompatActivity{
private Button button,button2,button3,button4;?*说明按钮*/
private View view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.linearlayout);
button2=findViewById(R.id.button2); // 绑定按钮的点击事件
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
button2.setText("您选择了方式2点击按钮");
}
})
}
}
三,
Activity/Fragment 实现 View.OnClickListener
接口
适用场景:需要统一管理多个按钮的点击事件,集中处理逻辑更清晰。
Layout内随便定义一个Button:
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="方式三" />
activity内添加
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button button,button2,button3,button4;
private View view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.linearlayout);
button3.setOnClickListener(this);
}
@Override
public void onClick(View view) {
button3.setText("您方式三点击按钮");
}
}
这里有一个注意点,就是假设使用了方式一,那么使用方式三的时候,这里会产生冲突,那么方式一的点击事件会被方式三抢占(我也不理解)