?前言
在 Android Studio 开发中,你会经常和这种代码打交道:
1 package com.example.activitytest; 2 public class FirstActivity extends AppCompatActivity { 3 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.first_layout);//给当前的活动加载一个布局 9 Button btn1 = findViewById(R.id.btn_1); 10 11 btn1.setOnClickListener(new View.OnClickListener(){ 12 public void onClick(View v){ 13 14 }); 15 } 16 }那么,setOnClickListener() 方法起到什么作用呢?
在本次代码中,setOnClickListener() 方法为按钮注册一个监听器,点击按钮时就会执行监听器中的 onClick() 方法。
onClicklistener是一个接口,不能实例化,这就是一个匿名内部类。
?两种方式实现点击事件
用匿名类来实现点击事件
用外部类来实现点击事件
?Code
.java 代码:
1 package com.example.activitytest; 2 3 import android.os.Bundle; 4 import android.view.View; 5 import android.widget.Button; 6 import android.widget.Toast; 7 8 import androidx.appcompat.app.AppCompatActivity; 9 10 public class FirstActivity extends AppCompatActivity { 11 12 @Override 13 protected void onCreate(Bundle savedInstanceState) { 14 15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.first_layout);//给当前的活动加载一个布局 17 18 Button btn1 = findViewById(R.id.btn_1); 19 Button btn2 = findViewById(R.id.btn_2); 20 21 //用匿名类来实现点击事件的方法 22 btn1.setOnClickListener(new View.OnClickListener(){ 23 public void onClick(View v){ 24 Toast.makeText(FirstActivity.this,"用匿名类来实现点击事件",Toast.LENGTH_SHORT).show(); 25 } 26 }); 27 28 btn2.setOnClickListener(new MyClick()); 29 } 30 //用外部类来实现点击事件的代码如下 31 class MyClick implements View.OnClickListener{ 32 33 @Override 34 public void onClick(View v) { 35 Toast t = Toast.makeText(FirstActivity.this,"用外部类来实现点击事件",Toast.LENGTH_SHORT); 36 t.show(); 37 } 38 } 39 }.xml 代码:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" 6 android:padding="10dp"> 7 8 <Button 9 android:id="@+id/btn_1" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" 12 android:layout_marginTop="10dp" 13 android:background="#33CCCC" 14 android:text="Button_1" /> 15 16 <Button 17 android:id="@+id/btn_2" 18 android:layout_width="match_parent" 19 android:layout_height="wrap_content" 20 android:background="#D54D2B" 21 android:layout_marginTop="10dp" 22 android:text="Button_2" 23 /> 24 </LinearLayout>
?运行效果