Android Studio 有关 setOnClickListener() 方法的总结

 

•前言

  在 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>

•运行效果

•精简代码

  分下如下代码:

 1 package com.example.helloworld;
 2 
 3 import android.content.Intent;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.widget.Button;
 7 
 8 import androidx.appcompat.app.AppCompatActivity;
 9 
10 public class MainActivity extends AppCompatActivity {
11 
12     private Button mBtn1;
13     private Button mBtn2;
14     private Button mBtn3;
15     private Button mBtn4;
16     private Button mBtn5;
17 
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22 
23         mBtn1 = findViewById(R.id.btn_1);
24 
25         mBtn1.setOnClickListener(new View.OnClickListener(){
26             public void onClick(View v){
27                 //跳转到 TextView 演示界面
28                 Intent intent = new Intent(MainActivity.this, TextViewActivity.class);
29                 startActivity(intent);
30             }
31         });
32 
33         mBtn2 = findViewById(R.id.btn_2);
34         mBtn2.setOnClickListener(new View.OnClickListener() {
35             @Override
36             public void onClick(View v) {
37                 Intent intent = new Intent(MainActivity.this,QQ.class);
38                 startActivity(intent);
39             }
40         });
41 
42         mBtn3 = findViewById(R.id.btn_3);
43         mBtn3.setOnClickListener(new View.OnClickListener() {
44             @Override
45             public void onClick(View v) {
46                 Intent intent = new Intent(MainActivity.this,ButtonActivity.class);
47                 startActivity(intent);
48             }
49         });
50 
51         mBtn4 = findViewById(R.id.btn_4);
52         mBtn4.setOnClickListener(new View.OnClickListener() {
53             @Override
54             public void onClick(View v) {
55                 Intent intent = new Intent(MainActivity.this,IntentActivity.class);
56                 startActivity(intent);
57             }
58         });
59 
60         mBtn5 = findViewById(R.id.btn_5);
61         mBtn5.setOnClickListener(new View.OnClickListener() {
62             @Override
63             public void onClick(View v) {
64                 Intent intent = new Intent(MainActivity.this,EditTextActivity.class);
65                 startActivity(intent);
66             }
67         });
68     }
69 }

  五个 Button 变量,每个变量调用了 setOnClickListener() 方法。

  每次调用都重写一遍 setOnClickListener() 方法,是不是看上去略微臃肿了一些?

  怎样才能给这段代码减减肥呢?

  答案是用外部类来实现点击事件;

  精简后的代码如下:

 1 package com.example.helloworld;
 2 
 3 import android.content.Intent;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.widget.Button;
 7 
 8 import androidx.appcompat.app.AppCompatActivity;
 9 
10 public class MainActivity extends AppCompatActivity {
11 
12     private Button mBtn1;
13     private Button mBtn2;
14     private Button mBtn3;
15     private Button mBtn4;
16     private Button mBtn5;
17     private Button mBtn6;
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22 
23         mBtn1 = findViewById(R.id.btn_1);
24         mBtn1.setOnClickListener(new MyClick());
25 
26         mBtn2 = findViewById(R.id.btn_2);
27         mBtn2.setOnClickListener(new MyClick());
28 
29         mBtn3 = findViewById(R.id.btn_3);
30         mBtn3.setOnClickListener(new MyClick());
31 
32         mBtn4 = findViewById(R.id.btn_4);
33         mBtn4.setOnClickListener(new MyClick());
34 
35         mBtn5 = findViewById(R.id.btn_5);
36         mBtn5.setOnClickListener(new MyClick());
37 
38         mBtn6 = findViewById(R.id.btn_6);
39         mBtn6.setOnClickListener(new MyClick());
40 
41     }
42     private class MyClick implements View.OnClickListener{
43 
44         public void onClick(View v){
45             Intent intent = null;
46             switch(v.getId()){
47                 case R.id.btn_1:
48                     //填入对应的事件
49                     intent = new Intent(MainActivity.this, TextViewActivity.class);
50                     break;
51                 case R.id.btn_2:
52                     //填入对应的事件
53                     intent = new Intent(MainActivity.this,QQ.class);
54                     break;
55                 case R.id.btn_3:
56                     //填入对应的事件
57                     intent = new Intent(MainActivity.this,ButtonActivity.class);
58                     break;
59                 case R.id.btn_4:
60                     //填入对应的事件
61                     intent = new Intent(MainActivity.this,IntentActivity.class);
62                     break;
63                 case R.id.btn_5:
64                     //填入对应的事件
65                     intent = new Intent(MainActivity.this,EditTextActivity.class);
66                     break;
67                 case R.id.btn_6:
68                     //填入对应的事件
69                     intent = new Intent(MainActivity.this,RedioButtonActivity.class);
70                     break;
71             }
72             startActivity(intent);
73         }
74     }
75 }

  这么写,看着是不是舒服多了。

posted @ 2021-01-22 15:43  MElephant  阅读(19261)  评论(0编辑  收藏  举报