Android代码规范----按钮单击事件的四种写法

【前言】

按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类。

按钮多的时候一般选择第四种写法。

 

一、第一种写法:在XML文件中声明onClick属性(很少用)

在XML文件中显式指定控件的onClick属性,点击按钮时会利用反射的方式调用对应Activity中的onClick()方法。

(1)xml文件代码如下:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <Button
 8         android:id="@+id/btn1"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:onClick="onClick"
12         android:text="按钮1" />
13 
14     <Button
15         android:id="@+id/btn2"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:onClick="onClick"
19         android:text="按钮2" />
20 
21 </LinearLayout>

上面的代码中,我们在第11行、18行指定了onClick属性,然后接下来在Activity中写一个onClick同名方法。

(2)MainActivity.java:

 1 package com.vae01;
 2 
 3 import android.app.Activity;
 4 import android.content.DialogInterface.OnClickListener;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.Button;
 8 import android.widget.ImageView;
 9 import android.widget.TextView;
10 import android.widget.Toast;
11 
12 public class MainActivity extends Activity {
13 
14     private Button btn1, btn2;
15 
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20         initView();
21     }
22 
23     // 方法:初始化View
24     private void initView() {
25         btn1 = (Button) findViewById(R.id.btn1);
26         btn2 = (Button) findViewById(R.id.btn2);
27     }
28 
29     //方法:控件View的点击事件
30     public void onClick(View v) {
31         switch (v.getId()) {
32         case R.id.btn1:
33             Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
34             break;
35         case R.id.btn2:
36             Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
37             break;        
38             
39         default:
40             break;
41         }
42     }
43 }

注意,第30行的onClick()方法的权限是public,毕竟xml文件还要访问的嘛。

 

二、第二种写法:使用内部类(很少用)

(1)xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮1" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮2" />

</LinearLayout>

(2)MainActivity.java:

 1 package com.vae01;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.view.View.OnClickListener;
 7 import android.widget.Button;
 8 import android.widget.ImageView;
 9 import android.widget.TextView;
10 import android.widget.Toast;
11 
12 public class MainActivity extends Activity {
13 
14     private Button btn1, btn2;
15 
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20         initView();
21     }
22 
23     // 方法:初始化View
24     private void initView() {
25         btn1 = (Button) findViewById(R.id.btn1);
26         btn2 = (Button) findViewById(R.id.btn2);
27         
28         btn1.setOnClickListener(new MyClickListener());
29         btn2.setOnClickListener(new MyClickListener());
30     }
31 
32     class MyClickListener implements OnClickListener {
33         @Override
34         public void onClick(View v) {
35             switch (v.getId()) {
36             case R.id.btn1:
37                 Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
38                 break;
39             case R.id.btn2:
40                 Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
41                 break;
42             default:
43                 break;
44             }
45         }
46     }
47 } 

注意第28、29行:不要忘记了绑定监听器。

 

三、第三种写法:匿名内部类(适合场景:测试、或者只有单个button的时候。使用较多

(1)xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮1" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮2" />

</LinearLayout>

(2)MainActivity.java:

 1 package com.vae01;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.view.View.OnClickListener;
 7 import android.widget.Button;
 8 import android.widget.Toast;
 9 
10 public class MainActivity extends Activity {
11 
12     private Button btn1, btn2;
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_main);
18         initView();
19     }
20 
21     // 方法:初始化View
22     private void initView() {
23         btn1 = (Button) findViewById(R.id.btn1);
24         btn2 = (Button) findViewById(R.id.btn2);
25         
26         btn1.setOnClickListener(new OnClickListener(){
27             @Override
28             public void onClick(View v) {
29                 Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
30             }
31             
32         });
33         
34         btn2.setOnClickListener(new OnClickListener(){
35             @Override
36             public void onClick(View v) {
37                 Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
38             }
39             
40         });
41     }
42 }

 

四、第四种写法:Activity实现View.OnClickListener接口(最常用)

Activity继承View.OnClickListener,由Activity实现OnClick(View view)方法,在OnClick(View view)方法中用switch-case对不同id代表的button进行相应的处理

(1)xml代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮1" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮2" />

</LinearLayout>

(2)MainActivity.java:

 1 package com.vae01;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.view.View.OnClickListener;
 7 import android.widget.Button;
 8 import android.widget.Toast;
 9 
10 public class MainActivity extends Activity implements OnClickListener{
11 
12     private Button btn1, btn2;
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_main);
18         //初始化View
19         initView();
20     }
21 
22     // 方法:初始化View
23     private void initView() {
24         btn1 = (Button) findViewById(R.id.btn1);
25         btn2 = (Button) findViewById(R.id.btn2);    
26         
27         //按钮绑定点击事件的监听器
28          btn1.setOnClickListener(this);
29          btn2.setOnClickListener(this);
30     }
31 
32     //方法:按钮的单击事件
33     @Override
34     public void onClick(View v) {
35         switch (v.getId()) {
36         case R.id.btn1:
37             Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
38             break;
39         case R.id.btn2:
40             Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
41             break;
42         default:
43             break;
44         }            
45     }
46 }

 

 

posted @ 2015-03-29 14:52  千古壹号  阅读(23138)  评论(0编辑  收藏  举报