看到CheckBox这一章的内容,发现监听CheckBox的事件有很多,OnCheckedChangeListener、OnClickListener、OnTouchListener。

于是写代码为了测试他们的区别。

 

 
  
  1. package com.xc.ex04_04;  
  2.  
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.MotionEvent;  
  6. import android.view.View;  
  7. import android.widget.Button;  
  8. import android.widget.CheckBox;  
  9. import android.widget.CompoundButton;  
  10. import android.widget.TextView;  
  11.  
  12. public class EX04_04 extends Activity {  
  13.     public TextView tv1;  
  14.     public TextView tv2;  
  15.     public CheckBox cb;  
  16.     public Button b;  
  17.     /** Called when the activity is first created. */ 
  18.     @Override 
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.         tv1 = (TextView)findViewById(R.id.tv1);  
  23.         tv2 = (TextView)findViewById(R.id.tv2);  
  24.         cb = (CheckBox)findViewById(R.id.cb);  
  25.         b = (Button)findViewById(R.id.b);  
  26.           
  27.         cb.setChecked(false);  
  28.         b.setEnabled(false);  
  29.         cb.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {  
  30.               
  31.             @Override 
  32.             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  
  33.                 // TODO Auto-generated method stub  
  34.                 if(cb.isChecked()){  
  35.                     b.setEnabled(true);  
  36.                     tv2.setText("");  
  37.                     System.out.println(33);  
  38.                 }  
  39.                 else{  
  40.                     b.setEnabled(false);  
  41.                     tv1.setText("");  
  42.                     tv2.setText("");  
  43.                     System.out.println(44);  
  44.                 }  
  45.             }  
  46.         });  
  47.         cb.setOnClickListener(new CheckBox.OnClickListener() {  
  48.               
  49.             @Override 
  50.             public void onClick(View v) {  
  51.                 // TODO Auto-generated method stub  
  52.                 if(cb.isChecked()){  
  53.                     b.setEnabled(true);  
  54.                     tv2.setText("");  
  55.                     System.out.println(11);  
  56.                 }  
  57.                 else{  
  58.                     b.setEnabled(false);  
  59.                     tv1.setText("");  
  60.                     tv2.setText("");  
  61.                     System.out.println(22);  
  62.                 }  
  63.             }  
  64.         });  
  65.         cb.setOnTouchListener(new CheckBox.OnTouchListener() {  
  66.               
  67.             @Override 
  68.             public boolean onTouch(View v, MotionEvent event) {  
  69.                 // TODO Auto-generated method stub  
  70.                 if(cb.isChecked()){  
  71.                     System.out.println(55);  
  72.                 }  
  73.                 else{  
  74.                     System.out.println(66);  
  75.                 }  
  76.                 return false;  
  77.             }  
  78.         });  
  79.           
  80.         b.setOnClickListener(new Button.OnClickListener() {  
  81.               
  82.             @Override 
  83.             public void onClick(View v) {  
  84.                 // TODO Auto-generated method stub  
  85.                 if(cb.isChecked()){  
  86.                     tv1.setText("你已经同意了");  
  87.                 }  
  88.                 else{  
  89.                   
  90.                 }  
  91.             }  
  92.         });  
  93.     }  

首先模拟器状态为,

点击我同意以后,打印的内容为

说明OnTouchListener是在CheckBox点击之前获得的内容,然后执行点击CheckBox之后的内容,执行OnCheckedChangeListener,再是OnClickListener。