Android----按钮单击事件的四种写法

来源:互联网 发布:大数据和云计算的关系 编辑:程序博客网 时间:2024/06/08 19:06

【前言】

按钮少的时候用第三种的匿名内部类会比较快,比如写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 }
复制代码

 

 

通过Eclipse可以在自己的应用程序中增加一个按钮,同时在main.xml中会自动增加如下的代码:

---

[html] view plain copy
  1. <Button  
  2.     android:id="@+id/button1"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content"  
  5.     android:text="Button" />  

编译运行程序时,将会看到一个按钮。单击它时,没有任何的响应和动作。
需要我们手动增加代码为该按钮增加单击事件的响应。


为按钮增加单击事件的响应时有两种方式:
1、通过Button的setOnClickListener方法为该按钮绑定一个单击事件监听器,用于监听用户的单击事件。代码如下:

[java] view plain copy
  1. public class MyActivity extends Activity {  
  2.     protected void onCreate(Bundle icicle) {  
  3.         super.onCreate(icicle);  
  4.   
  5.         setContentView(R.layout.content_layout_id);  
  6.   
  7.         //手工增加代码开始  
  8.         //将按钮绑定一个单操作的事件监听器。用于监听用户的单击操作。  
  9.         final Button button = (Button) findViewById(R.id.button_id);  
  10.         button.setOnClickListener(new View.OnClickListener() {  
  11.             public void onClick(View v) {  
  12.                 // Perform action on click  
  13.                 //增加自己的代码......  
  14.                 final TextView text = (TextView) findViewById(R.id.textView1);  
  15.                 text.setText("OnClick. " + " ....");      
  16.             }  
  17.         });  
  18.         //手工增加代码结束  
  19.     }  
  20. }  
上面的代码很简短,但不利于阅读。也可以使用下面的书写方式:

[java] view plain copy
  1. public class MyActivity extends Activity {  
  2.   
  3.     protected void onCreate(Bundle icicle) {  
  4.         super.onCreate(icicle);  
  5.   
  6.         setContentView(R.layout.content_layout_id);  
  7.   
  8.         //手动增加代码开始  
  9.         Button button = (Button) findViewById(R.id.button_id);  
  10.         button.setOnClickListener(myOnClickListener);  
  11.         //手动增加代码结束  
  12.     }  
  13.   
  14.    //手动增加代码开始  
  15.    private OnClickListener myOnClickListener = new OnClickListener() {  
  16.        public void onClick(View v) {  
  17.        //增加自己的代码......  
  18.        final TextView text = (TextView) findViewById(R.id.textView1);  
  19.        text.setText("OnClick. " + " ....");              
  20.        }         
  21.    };  
  22.    //手动增加代码结束  
  23. }  


2、通过修改main.xml中Button的属性,为按钮增加单击事件请求。修改的xml文件如下:

[html] view plain copy
  1. <Button  
  2.     android:id="@+id/button1"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content"  
  5.     android:onClick="OnMySelfClick"  
  6.     android:text="Button" />  


然后在.java文件中增加xml文件中提到的OnMySelfClick函数:

[java] view plain copy
  1. public class HelloAndroidActivity extends Activity {  
  2.     /** Called when the activity is first created. */     
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);   
  7.           
  8.     }  
  9.       
  10.     /* ************************************ 
  11.      *   按钮的单击操作处理函数。 
  12.      *   下面的函数是一个按钮单击的处理函数。 
  13.      *   它需要在layout的xml中将按钮增加一个OnClick的属性, 
  14.      *   并指定它的处理函数。如下 
  15.      *   
  16.      *   android:onClick="OnMySelfClick" 
  17.      *    
  18.      *   这样的话,就不用再增加上面那些复杂的代码了。 
  19.      *    
  20.      * */  
  21.     public void OnMySelfClick(View v)  
  22.     {  
  23.         final TextView text = (TextView) findViewById(R.id.textView1);  
  24.         text.setText("OnMySelfClick. " + " ....");      
  25.     }  
  26. }  


第二种方法比较第一种方法简单了许多。
0 0
原创粉丝点击