android(2):按钮点击事件的四种写法(装载)

来源:互联网 发布:北京域名百科 编辑:程序博客网 时间:2024/05/21 07:59


【前言】

按钮少的时候用第三种的匿名内部类会比较快,比如写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     <Button15         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     @Override17     protected void onCreate(Bundle savedInstanceState) {18         super.onCreate(savedInstanceState);19         setContentView(R.layout.activity_main);20         initView();21     }22 23     // 方法:初始化View24     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     @Override17     protected void onCreate(Bundle savedInstanceState) {18         super.onCreate(savedInstanceState);19         setContentView(R.layout.activity_main);20         initView();21     }22 23     // 方法:初始化View24     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         @Override34         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     @Override15     protected void onCreate(Bundle savedInstanceState) {16         super.onCreate(savedInstanceState);17         setContentView(R.layout.activity_main);18         initView();19     }20 21     // 方法:初始化View22     private void initView() {23         btn1 = (Button) findViewById(R.id.btn1);24         btn2 = (Button) findViewById(R.id.btn2);25         26         btn1.setOnClickListener(new OnClickListener(){27             @Override28             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             @Override36             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     @Override15     protected void onCreate(Bundle savedInstanceState) {16         super.onCreate(savedInstanceState);17         setContentView(R.layout.activity_main);18         //初始化View19         initView();20     }21 22     // 方法:初始化View23     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     @Override34     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 }
复制代码

 


原文装载:http://www.cnblogs.com/smyhvae/p/4375710.html


本次学习遇到几个问题(android studio)

1、MainActivity 继承Activity 重写onClick时候。  忘记了xml文件下增加属性   android:onClick="onClick"

2、实现OnClickListener 接口时候,导错包

android.view.View.OnClickListener      void  onClick(View v)   Called when a view has been clicked. android.content.DialogInterface.OnClickListener(这个是针对对话框)onClick(DialogInterface dialog, int which)     This method will be invoked when a button in the dialog is clicked.



  

0 0