1.匿名内部类作为事件监听器(没有名字的内部类,只能使用一次)
监听按钮时,只需要设置监听,并常见匿名内部类即可。
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn_text = ((Button)v).getText().toString();
Toast.makeText(Main1Activity.this, "点击了"+btn_text, Toast.LENGTH_LONG).show();
}
});
2.成员内部类作为事件监听器
在activity中,自定义一个点击事件监听器的内部类,然后实现View.OnClickListener接口中的onclick方法。
class MyClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button2:
btn_text = button2.getText().toString();
Toast.makeText(Main2Activity.this, "点击了"+btn_text, Toast.LENGTH_LONG).show();
break;
case R.id.button3:
btn_text = button3.getText().toString();
Toast.makeText(Main2Activity.this, "点击了"+btn_text, Toast.LENGTH_LONG).show();
}
}
}
按钮通过内部类实现点击监听:
button2=(Button)findViewById(R.id.button2);
button3=(Button)findViewById(R.id.button3);
MyClickListener myClickListener=new MyClickListener();
button2.setOnClickListener(myClickListener);
button3.setOnClickListener(myClickListener);
3.activity本身作为事件监听器
首先活动应该实现View.OnClickListener接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
、、、
}
之后实现onClick方法,通过这样的方式可以实现监听器的复用。
@Override
public void onClick(View v){
switch(v.getId()){
case R.id.button4:
btn_text = button4.getText().toString();
Toast.makeText(Main3Activity.this, "点击了"+btn_text, Toast.LENGTH_LONG).show();
break;
case R.id.button5:
btn_text = button5.getText().toString();
Toast.makeText(Main3Activity.this, "点击了"+btn_text, Toast.LENGTH_LONG).show();
break;
}
}
注册监听,只需要将当前对象this给按钮即可。
button4 = (Button)findViewById(R.id.button4);
button5 = (Button)findViewById(R.id.button5);
button4.setOnClickListener(this);
button5.setOnClickListener(this);
4.xml文件中在按钮上注册处理点击事件
给按钮指定onClick属性,android:onClick=”onClick”(onClick是方法名)
<Button
android:id="@+id/button6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button6"
android:onClick="click"/>
在activity中实现,格式为public void XXX(View v) ,必须是public类型,void返回值,方法名与xml中定义的一致并接收一个View类型的参数。
public void click(View v){
btn_text = ((Button)v).getText().toString();
Toast.makeText(Main1Activity.this, "点击了"+btn_text, Toast.LENGTH_LONG).show();
}
测试代码:
xml文件中的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context="MainActivity">
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button1"/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button2"/>
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button3"/>
<Button
android:id="@+id/button4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button4"/>
<Button
android:id="@+id/button5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button5"/>
<Button
android:id="@+id/button6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button6"
android:onClick="click"/>
</LinearLayout>
主活动中的代码:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button button1,button2,button3,button4,button5;
private String btn_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1=(Button)findViewById(R.id.button1);
button2=(Button)findViewById(R.id.button2);
button3=(Button)findViewById(R.id.button3);
button4=(Button)findViewById(R.id.button4);
button5=(Button)findViewById(R.id.button5);
//匿名内部类作为事件监听器
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn_text = ((Button)v).getText().toString();
Toast.makeText(MainActivity.this, "点击了"+btn_text, Toast.LENGTH_LONG).show();
}
});
//实现事件监听器类
MainActivity.MyClickListener myClickListener=new MainActivity.MyClickListener();
button2.setOnClickListener(myClickListener);
button3.setOnClickListener(myClickListener);
button4.setOnClickListener(this);
button5.setOnClickListener(this);
}
//成员内部类作为事件监听器
class MyClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button2:
btn_text = button2.getText().toString();
Toast.makeText(MainActivity.this, "点击了"+btn_text, Toast.LENGTH_LONG).show();
break;
case R.id.button3:
btn_text = button3.getText().toString();
Toast.makeText(MainActivity.this, "点击了"+btn_text, Toast.LENGTH_LONG).show();
}
}
}
//当activity本身作为事件监听器,需要实现onClick方法
@Override
public void onClick(View v){
switch(v.getId()){
case R.id.button4:
btn_text = button4.getText().toString();
Toast.makeText(MainActivity.this, "点击了"+btn_text, Toast.LENGTH_LONG).show();
break;
case R.id.button5:
btn_text = button5.getText().toString();
Toast.makeText(MainActivity.this, "点击了"+btn_text, Toast.LENGTH_LONG).show();
break;
}
}
//xml文件中在按钮上注册处理点击事件时,需要实现的方法
public void click(View v){
btn_text = ((Button)v).getText().toString();
Toast.makeText(MainActivity.this, "点击了"+btn_text, Toast.LENGTH_LONG).show();
}
}
运行结果: