简便添加监听器的方法

来源:互联网 发布:俄罗斯的经济知乎 编辑:程序博客网 时间:2024/06/09 14:33

在开发中为控件添加Listener是非常常见的工作,最简单的添加Listener方式可以这样:

Java代码
    Java代码  收藏代码
    1. findViewById(R.id.myButton).setOnClickListener(new View.OnClickListener() {  
    2.     public void onClick(View v) {  
    3.         // Do stuff  
    4.     }  
    5. });  

     采用上述方法添加Listener有个缺点就是如果控件太多的话,Listener数量也会增多,因此,可以采用如下的小窍门减少Listener的数量:

    Java代码
      Java代码  收藏代码
      1. View.OnClickListener handler = View.OnClickListener() {  
      2.     public void onClick(View v) {  
      3.         switch (v.getId()) {  
      4.             case R.id.Button01: // doStuff  
      5.                 break;  
      6.             case R.id.Button02: // doStuff  
      7.                 break;  
      8.         }  
      9.     }  
      10. }  
      11.   
      12. findViewById(R.id.myButton).setOnClickListener(handler);  
      13. findViewById(R.id.myOtherButton).setOnClickListener(handler);  

      在Android1.6里面,添加Listener的工作变得相当的简单(感觉更像在做网页编程!),具体步骤如下:

      1.首先在layout里面定义Button并指定响应的Listener

      Xml代码
        Xml代码  收藏代码
        1. <?xml version="1.0" encoding="utf-8"?>  
        2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        3.     android:orientation="vertical"  
        4.     android:layout_width="fill_parent"  
        5.     android:layout_height="fill_parent"  
        6.     >  
        7. <TextView    
        8.     android:layout_width="fill_parent"   
        9.     android:layout_height="wrap_content"   
        10.     android:text="@string/hello"  
        11.     />  
        12. <Button   
        13.     android:text="Button01"   
        14.     android:id="@+id/Button01"   
        15.     android:layout_width="wrap_content"   
        16.     android:layout_height="wrap_content"  
        17.     android:onClick="myClickHandler01"  
        18.     />  
        19. <Button   
        20.     android:text="Button02"   
        21.     android:id="@+id/Button02"   
        22.     android:layout_width="wrap_content"   
        23.     android:layout_height="wrap_content"  
        24.     android:onClick="myClickHandler02"  
        25.     />  
        26. <TextView    
        27.     android:layout_width="fill_parent"   
        28.     android:layout_height="wrap_content"   
        29.     android:text="@string/hello"  
        30.     />  
        31. </LinearLayout>  

        其中以下这两行就是新增的特性:

        android:onClick="myClickHandler01"

        android:onClick="myClickHandler02"

         

        2.在活动里面定义public的方法myClickHandler01、和myClickHandler02(注意这两个方法必须有一个View的形参)。

        Java代码
        Java代码  收藏代码
        1. package com.ray.test;  
        2.   
        3. import android.app.Activity;  
        4. import android.os.Bundle;  
        5. import android.view.View;  
        6.   
        7. public class TestOnClickListener extends Activity {  
        8.      
        9.     @Override  
        10.     public void onCreate(Bundle savedInstanceState) {  
        11.         super.onCreate(savedInstanceState);  
        12.         setContentView(R.layout.main);  
        13.           
        14.   
        15.     }  
        16.     public void myClickHandler01(View target){  
        17.         setTitle("myClickHandler01");  
        18.     }  
        19.     public void myClickHandler02(View target){  
        20.         setTitle("myClickHandler02");  
        21.     }  
        22. }  

        当然,你也可以采用这种写法:

        将两个按钮设置到同一个Listener

        android:onClick="myClickHandler"

        android:onClick="myClickHandler"

        Java代码
        Java代码  收藏代码
        1. package com.ray.test;  
        2.   
        3. import android.app.Activity;  
        4. import android.os.Bundle;  
        5. import android.view.View;  
        6.   
        7. public class TestOnClickListener extends Activity {  
        8.      
        9.     @Override  
        10.     public void onCreate(Bundle savedInstanceState) {  
        11.         super.onCreate(savedInstanceState);  
        12.         setContentView(R.layout.main);  
        13.     }  
        14.     public void myClickHandler(View target){  
        15.          switch (target.getId()) {  
        16.          case R.id.Button01:   
        17.              setTitle("myClickHandler01");  
        18.              break;  
        19.          case R.id.Button02:   
        20.              setTitle("myClickHandler02");  
        21.              break;  
        22.          }  
        23.     }  
        24. }  

         参考文章:《UI framework changes in Android 1.6 》(需翻墙)

        原创粉丝点击