package com.itcast.radiobutton; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.TextView; public class MainActivity extends Activity { private TextView tv; private Button btn; private CheckBox cb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)this.findViewById(R.id.TextView01); cb=(CheckBox)this.findViewById(R.id.CheckBox01); cb.setChecked(false); btn = (Button)this.findViewById(R.id.Button01); btn.setEnabled(false); cb.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub if(cb.isChecked()){ btn.setEnabled(true); tv.setText(""); }else { btn.setEnabled(false); tv.setText("請勾選我"); } } }); cb.setOnCheckedChangeListener(new OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub if(isChecked){ btn.setEnabled(true); tv.setText(""); }else { btn.setEnabled(false); tv.setText("請勾選我"); } } } ); btn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub if(cb.isChecked()){ tv.setText("已經選擇"); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
兩者都能實現對CheckBox的狀態改變的監聽,但一般情況下,用的更多的是setOnCheckedChangeListener。因為,當CheckBox的狀態不是通過點擊事件改變,而是通過其他的方式改變時,比如setCheck(),setOnClickListener無法完成此種情況下的監聽。OnCheckChangedListener監聽CheckBox的狀態,無論來自你的onClick事件還是其他。