一.采用匿名内部类
适用于单个事件
例如 下面xml中实现界面布局有一个按钮,然后java中实现当按钮被点击后的事件
xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/bt1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点击我"android:textSize="18dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
public class MainActivity extends AppCompatActivity {public Button btn;//用于接收按钮@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_1);btn= (Button) findViewById(R.id.bt1);//获得button//为按钮绑定点击监听事件btn.setOnClickListener(new View.OnClickListener() {//注册监听器@Overridepublic void onClick(View v) {System.out.println("点击了我一下");}});}
详解:
btn.setOnClickListener(new View.OnClickListener() {//注册监听器@Overridepublic void onClick(View v) {System.out.println("点击了我一下");}});
代码中为按钮绑定了监听事件,传递的参数为View.OnClickListener接口的实现类对象,这样setOnClickListener方法中就会调用被传递的对象中的onClick方法。重写了onClick方法用于实现btn点击后发生的事件。
二.实现View.OnClickListener接口
使用于多个事件
例如:
xml代码还使用上面的,java代码如下
public class MainActivity extends AppCompatActivity implements View.OnClickListener {public Button btn;//用于接收按钮@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_1);btn= (Button) findViewById(R.id.bt1);//获得buttonbtn.setOnClickListener(this);//注册监听器}@Overridepublic void onClick(View v) {System.out.println("点击了我一下");}
}
详解:
btn.setOnClickListener(this);//注册监听器
因为本类实现了View.OnClickListener接口,所以在本类中重写了onClick(View v)方法,在为按钮绑定监听事件setOnClickListener方法中只需传递本类对象即可,因为本类已经是View.OnClickListener接口的实现类了,然后setOnClickListener会根据参数对象调用onClick方法以实现点击事件。
三.在XML布局中使用onClick属性
操作简单但不易维护
java代码:
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_1);}public void method(View view){System.out.println("点击了我一下");}
}
xml代码:
<Buttonandroid:id="@+id/bt1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点击我"android:textSize="18dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"android:onClick="method"/>
在最后一行添加android:onClick=“method”,当被点击了执行java代码中的method方法。