【1】更改包名及项目名称的方法

Android 按钮点击响应慢_Android 按钮点击响应慢

Android 按钮点击响应慢_android_02

 

 

Android 按钮点击响应慢_匿名内部类_03

 【2】按钮点击事件的写法

Android 按钮点击响应慢_Android 按钮点击响应慢_04

 

【2.1】第一种写法:匿名内部类写法

Android 按钮点击响应慢_Android 按钮点击响应慢_05

1 package buttonclickdemo.com.example.buttonclickdemo;
 2 
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.widget.Button;
 7 import android.widget.Toast;
 8 
 9 public class MainActivity extends AppCompatActivity {
10 
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_main);
15 
16         /*第一种按钮的点击方式-匿名内部类显示*/
17         Button bt1 = (Button) findViewById(R.id.bt1);
18         bt1.setOnClickListener(new View.OnClickListener() {
19             @Override
20             public void onClick(View view) {
21                 Toast.makeText(getApplicationContext(),"我是第一种显示方式",Toast.LENGTH_SHORT).show();
22             }
23         });
24     }
25 }

 

【2.2】第二种方法-不使用匿名内部类,使用自己的实体类完成点击事件

【2.2.1】使用实体类实现点击事件

  ①需要将方法抽取出来,callphone();

  ②实现自己的类MyOnclickListener,实现OnclickListener接口,在override时调用抽取的方法;

Android 按钮点击响应慢_匿名内部类_06

1 package buttonclickdemo.com.example.buttonclickdemo;
 2 
 3 import android.net.sip.SipAudioCall;
 4 import android.support.v7.app.AppCompatActivity;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.Button;
 8 import android.widget.Toast;
 9 
10 public class MainActivity extends AppCompatActivity {
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);
16 
17 
18      /*第二种按钮的点击方式-匿名内部类显示*/
19         Button bt2 = (Button) findViewById(R.id.bt2);
20         bt2.setOnClickListener(new MyClickListener());
21 
22     }
23 
24     class MyClickListener implements View.OnClickListener{
25 
26         @Override
27         public void onClick(View v) {
28             Bt2_click();
29         }
30     }
31 
32     private void Bt2_click(){
33         Toast.makeText(getApplicationContext(),"我是第二种显示方式",Toast.LENGTH_SHORT).show();
34     }
35 }

 

【2.2.2】将局部变量改为全局变量

Android 按钮点击响应慢_ide_07

Android 按钮点击响应慢_android_08

 【2.3】第三种方法:基于【2.2】的改进-多个按键事件的使用;

使用判断不同按键事件的id值,分别调用不同按键处理事件的功能;

【注】在公司,无论是一个按键还是多个按键的实现,都使用该方法;

Android 按钮点击响应慢_ide_09

【源码】

1 package buttonclickdemo.com.example.buttonclickdemo;
 2 
 3 import android.net.sip.SipAudioCall;
 4 import android.support.v7.app.AppCompatActivity;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.Button;
 8 import android.widget.Toast;
 9 
10 import static buttonclickdemo.com.example.buttonclickdemo.R.id.bt1;
11 
12 public class MainActivity extends AppCompatActivity implements View.OnClickListener{
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_main);
18 
19 //        /*第一种按钮的点击方式-匿名内部类显示*/
20 //        Button bt1 = (Button) findViewById(R.id.bt1);
21 //        bt1.setOnClickListener(new View.OnClickListener() {
22 //            @Override
23 //            public void onClick(View view) {
24 //                Toast.makeText(getApplicationContext(),"我是第一种显示方式",Toast.LENGTH_SHORT).show();
25 //            }
26 //        });
27 
28 //     /*第二种按钮的点击方式-匿名内部类显示*/
29 //        Button bt2 = (Button) findViewById(R.id.bt2);
30 //        bt2.setOnClickListener(new MyClickListener());
31 //
32 //    }
33 //
34 //    class MyClickListener implements View.OnClickListener{
35 //
36 //        @Override
37 //        public void onClick(View v) {
38 //            Bt2_click();
39 //        }
40 //    }
41 //
42 //    private void Bt2_click(){
43 //        Toast.makeText(getApplicationContext(),"我是第二种显示方式",Toast.LENGTH_SHORT).show();
44 //    }
45 
46 
47         Button bt1 = (Button) findViewById(R.id.bt1);
48         Button bt2 = (Button) findViewById(R.id.bt2);
49         Button bt3 = (Button) findViewById(R.id.bt3);
50         Button bt4 = (Button) findViewById(R.id.bt4);
51 
52         bt1.setOnClickListener(this);
53         bt2.setOnClickListener(this);
54         bt3.setOnClickListener(this);
55         bt4.setOnClickListener(this);
56     }
57 
58 
59 
60     @Override
61     public void onClick(View view) {
62         int id = view.getId();
63         switch (id){
64             case R.id.bt1:
65                 Toast.makeText(getApplicationContext(),"我是bt1",Toast.LENGTH_SHORT).show();
66                 break;
67             case R.id.bt2:
68                 Toast.makeText(getApplicationContext(),"我是bt2",Toast.LENGTH_SHORT).show();
69                 break;
70             case R.id.bt3:
71                 Toast.makeText(getApplicationContext(),"我是bt3",Toast.LENGTH_SHORT).show();
72                 break;
73             case R.id.bt4:
74                 Toast.makeText(getApplicationContext(),"我是bt4",Toast.LENGTH_SHORT).show();
75                 break;
76             default:
77                 break;
78         }
79     }
80 }

 

【2.4】第四种方法-直接在activity_main.xml布局文件中声明该按钮的点击事件对应的方法

【注】该方法在公司没有人使用,因为在测试的时候,其中的该这种方式对应的方法没有被引用,会被删除;

当再次运行该程序的时候,点击按钮就会崩溃;

Android 按钮点击响应慢_Android 按钮点击响应慢_10

Android 按钮点击响应慢_匿名内部类_11

Android 按钮点击响应慢_ide_12

1 package buttonclickdemo.com.example.buttonclickdemo;
 2 
 3 
 4 import android.support.v7.app.AppCompatActivity;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.Toast;
 8 
 9 
10 public class MainActivity extends AppCompatActivity {
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);
16     }
17 
18         /* 第4中按钮点击方式*/
19 
20     public void bt4_onClick(View v) {
21         Toast.makeText(getApplicationContext(), "我是bt4-第四种显示方式", Toast.LENGTH_SHORT).show();
22     }
23 
24 }

Android 按钮点击响应慢_Android 按钮点击响应慢_13

 

【3】常见问题

【3.1】在点击事件的参数中不传递参数是不可行的;

Android 按钮点击响应慢_匿名内部类_14

Android 按钮点击响应慢_android_15

Android 按钮点击响应慢_ide_16

【原因】因为在源码中使用的了反射,必须找到此类:View.class;

【3.2】点击事件的方法权限不能改为private权限;

Android 按钮点击响应慢_Android 按钮点击响应慢_17

Android 按钮点击响应慢_android_18

【查看onClick的源码】

Android 按钮点击响应慢_匿名内部类_19

因为没有使用暴力反射,所以private权限的方法无法反射访问;如果是暴力反射,则使用的是getDclearMethod();