Android代码规范----按钮单击事件的四种写法
来自:http://www.cnblogs.com/smyhvae/p/4375710.html
【前言】
按钮少的时候用第三种的匿名内部类会比较快,比如写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 }

浙公网安备 33010602011771号