##1· 什麼是多選按鈕? 像這樣能夠選中多個選項的按鈕就叫多選按鈕(CheckBox)。android
##2· 如何來使用多選按鈕?ide
###2.1· 添加多選按鈕 編譯器經過不一樣的id來區分CheckBox,所以要注意id的命名。 XML佈局文件:佈局
<CheckBox android:id="@+id/eatBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Eat"/> <CheckBox android:id="@+id/sleepBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Sleep"/> <CheckBox android:id="@+id/codBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Cod"/> <CheckBox android:id="@+id/allBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="All"/>
###2.2· 生成並獲取多選按鈕 JAVA代碼: 首先將這些多選按鈕聲明爲成員變量。code
private CheckBox eatBox; private CheckBox sleepBox; private CheckBox codBox; private CheckBox allBox;
而後找到其對應的組件ID對象
eatBox = (CheckBox) findViewById(R.id.eatBox); sleepBox = (CheckBox) findViewById(R.id.sleepBox); codBox = (CheckBox) findViewById(R.id.codBox); allBox = (CheckBox) findViewById(R.id.allBox);
###2.3· 對多選按鈕進行監聽 何時須要監聽:繼承
當按鈕被選中時; 當按鈕未選中時;接口
老師介紹了兩種監聽方法:圖片
內部類實現接口OnClickListener的onClick(View view)方法;get
內部類實現接口OnCheckedChangeListener的onCheckedChanged(CompoundButton boxButton, boolean isChecked) 方法;編譯器
3· 兩個方法最明顯的區別就是傳遞參數不一樣:
前者傳遞一個View,後者傳遞一個CompoundButton(它是CheckBox等擁有兩種狀態的抽象的父類)和一個布爾值。這個布爾值表明所點擊的選項的狀態。
先建立一個內部類來實現監聽器接口,重寫指定方法: 作法1:
class BoxOnClickListener implements OnClickListener{ public void onClick(View view) { } }
按鈕只要被點擊,就會執行onClick方法。 這裏咱們要實現的是:知道具體哪個按鈕被選中仍是被取消選中。
CheckBox box = (CheckBox) view;//view向下轉型爲CheckBox switch(box.getId()){//經過id來判斷操做的是哪個CheckBox case R.id.eatBox: if(box.isChecked()) {//經過該方法來判斷CheckBox選中與否 System.out.println("eatBox is checked"); } else { System.out.println("eatBox is unchecked"); } break; case R.id.sleepBox: if(box.isChecked()) { System.out.println("sleepBox is checked"); } else { System.out.println("sleepBox is unchecked"); } break; case R.id.codBox: if(box.isChecked()) { System.out.println("codBox is checked"); } else { System.out.println("codBox is unchecked"); } break; case R.id.allBox: if(box.isChecked()) { System.out.println("allBox is checked"); } else { System.out.println("allBox is unchecked"); } break; }
監聽器類寫好以後,再建立出該類對象,最後掛接在多選按鈕上就完成了:
BoxOnClickListener listener = new BoxOnClickListener(); eatBox.setOnClickListener(listener); sleepBox.setOnClickListener(listener); codBox.setOnClickListener(listener); allBox.setOnClickListener(listener);
作法2: 繼承的接口改成OnCheckedChangeListener。以及方法改成onCheckedChanged(CompoundButton boxButton, boolean isChecked)
class BoxOnCheckedChangeListener implements OnCheckedChangeListener { @Override public void onCheckedChanged(CompoundButton boxButton, boolean isChecked) { } }
原來的經過box.isCheckde來判斷選中與否,如今就能夠用isChecked來代替:
case R.id.eatBox: if(isChecked){ System.out.println("eatBox is checked"); } else { System.out.println("eatBox is unchecked"); } break;
最後建立見監聽器類對象,並掛接上就完成了:
BoxOnCheckedChangeListener listener = new BoxOnCheckedChangeListener(); eatBox.setOnCheckedChangeListener(listener); sleepBox.setOnCheckedChangeListener(listener); codBox.setOnCheckedChangeListener(listener); allBox.setOnCheckedChangeListener(listener);
##4· 課後練習 ###4.1· 實現全選 經過CheckBox的setChecked(Boolean)方法來實現:
case R.id.allBox: eatBox.setChecked(isChecked); sleepBox.setChecked(isChecked); codBox.setChecked(isChecked); break;
###4.2· 練習要注意的地方
if(eatBox.isChecked() && sleepBox.isChecked() && codBox.isChecked()) { allBox.setChecked(true); } else {...}
else {//由於在取消全選按鈕的時候,會把每一個選項都取消掉,因此要用一個臨時變量來保持取消前的狀態。 boolean eatTemp = eatBox.isChecked(); boolean sleepTemp = sleepBox.isChecked(); boolean codTemp = codBox.isChecked(); allBox.setChecked(false); eatBox.setChecked(eatTemp); sleepBox.setChecked(sleepTemp); codBox.setChecked(codTemp); }
完畢