两种方法:
-
1.匿名内部类:
-
这种方式是创建一个实现了
View.OnClickListener
接口的匿名内部类,并在该类的onClick
方法中编写点击事件的处理逻辑。package com.example.apptest; import static java.time.LocalTime.now; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 当前的页面布局采用的是res/layout/activity_main.xml setContentView(R.layout.activity_main); //获取按钮控件 Button btn_click_single=findViewById(R.id.btn_click_single); TextView tv_result = findViewById(R.id.tv_result); //给按钮添加监听器 btn_click_single.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { 点击事件处理逻辑 String desc = String.format("%s 点击了按钮:%s", now(), ((Button)view).getText()); tv_result.setText(desc); } }); }
这种方法适合单次性使用监听器,或者在代码量不大时使用。可以直接在设置监听器的地方创建一个匿名内部类的实例,并重写<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_result" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffaa" android:fillViewport="true"/> <Button android:id="@+id/btn_click_single" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="匿名内部类实现的监听" android:textAllCaps="false"> </Button> </LinearLayout>
onClick
方法。
-
如果监听器具有复用性,可以将其定义为内部类。这样可以在同一个类中多次使用相同的监听器逻辑
2. 实现接口:
这种方式是让当前的 Activity
或 Fragment
实现 View.OnClickListener
接口,并在 Activity
或 Fragment
中设置监听器。
package com.example.apptest;
import static java.time.LocalTime.now;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 当前的页面布局采用的是res/layout/activity_main.xml
setContentView(R.layout.activity_main);
//获取按钮控件
Button btn_click_single=findViewById(R.id.btn_click_single);
//给按钮添加监听器
btn_click_single.setOnClickListener(this);
}
@Override
public void onClick(View view) {
TextView tv_result = findViewById(R.id.tv_result);
String desc = String.format("%s 点击了按钮:%s", now(), ((Button)view).getText());
tv_result.setText(desc);
}
}
// 在onCreate或其他方法中使用
MyOnClickListener listener = new MyOnClickListener();
button.setOnClickListener(listener);
跟着动脑学院学习事件监听器,代码上我有错漏的地方或者是我理解错的地方,欢迎提出!
(因为我是跟着文档敲的!所以很可能有理解错的地方!)