[基础控件]---状态切换控件CompoundButton及其子类CheckBox、RadioButton、ToggleButton、switch事件监听与场景使用...
一、事件監聽
對于普通的Button,對其進行事件監聽Google官方給出了常見的三種監聽方式:1、對每一個button設置事件監聽器button.setOnClickListener(View.OnclickListener? listener);此種方法當button按鈕較多時代碼顯得多、亂、不夠簡潔明了。
2、在Activity中實現接口View.OnclickListener,然后重寫void onClick(View v)方法,在方法中通過switch(v.getId())予以區分不同Button。此種方法較為簡潔,但是需要實現View.OnclickListener接口。3、在xml布局中在想要被監聽的
button上添加屬性:android:onClick=”doClick”屬性。在Activity 中添加監聽方法public void doClick(View view){},此種方法書寫簡單、明了、不需要實現額外的接口。推薦使用此種方法。也是Google官方文檔中常見用法。
對于狀態切換控件CompoundButton,不僅要對事件觸發的監聽,還有對狀態切換的監聽。所以在CompoundButton中需要對其進行兩個監聽:事件觸發、狀態切換。監聽的方式與普通Button三種監聽方式相似。只不過是多了一個監聽狀態的一項
而已。說多了都是廢話,還是直接上碼。
場景一:對UI界面上多個CompoundButton的事件監聽做統一處理。
<ToggleButtonandroid:id="@+id/togglebutton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="doClick"android:textOff="關"android:textOn="開" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><CheckBoxandroid:id="@+id/checkbox_meat"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="doClick"android:text="肉" /><CheckBoxandroid:id="@+id/checkbox_cheese"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="doClick"android:text="奶" /></LinearLayout><RadioGroupandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/radiobutton_add"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="doClick"android:text="增" /><RadioButtonandroid:id="@+id/radiobutton_delete"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="doClick"android:text="刪" /><RadioButtonandroid:id="@+id/radiobutton_update"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="doClick"android:text="改" /><RadioButtonandroid:id="@+id/radiobutton_seach"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="doClick"android:text="查" /></RadioGroup>有了布局,下面上Java代碼對其所有的CompoundButton控件進行統一監聽
/*** 向上轉型的目的是為了獲取子控件當前狀態。* @param view*/public void doClick(View view) {//1、被選中:toogle中isChecked==onboolean isChecked=((CompoundButton)view).isChecked();//向上轉型:獲取當前狀態//2、被點擊switch (view.getId()) {case R.id.togglebutton:if(isChecked){Log.i("MyInfo", "開");}else{Log.i("MyInfo", "關");}break;case R.id.checkbox_meat:if(isChecked){Log.i("MyInfo", "肉被選中");}else{Log.i("MyInfo", "肉被取消");}break;case R.id.checkbox_cheese:break;case R.id.radiobutton_add://切記:RadioButton無狀態的切換,僅有按鈕的切換。所以僅需判斷選中狀態 if(isChecked)if(isChecked)break;case R.id.radiobutton_delete:if(isChecked)break;case R.id.radiobutton_update:if(isChecked)break;case R.id.radiobutton_seach:if(isChecked)break;default:break;}}在doClick()方法中總體上執行了兩個步驟:1被選中---->2被點擊。通常這兩個步驟先后順序應該為被點擊----->被選中。但是這樣需要對每一個子控件分支中都需要添加是否被選中的判斷,代碼顯得重復。
所以在此我們使用逆向被點擊----->被選中。在被選中這一步中使用一個向上轉型是為了可以獲取所有CompoundButton子類的狀態。如果直接強轉為某一具體子類,則不具備通用性,不適應判斷所有CompoundButton
子類的被選中狀態。
當UI界面中狀態切換控件CompoundBuuton與普通Button均存在的情況下,建議對兩種控件的使用不同的方法進行監聽,例如:android:onClick=”compoundButtonClick”與android:onClick=”buttonClick”
?
二、CompoundButton擴展
---未完待續
轉載于:https://www.cnblogs.com/android001/p/4311558.html
總結
以上是生活随笔為你收集整理的[基础控件]---状态切换控件CompoundButton及其子类CheckBox、RadioButton、ToggleButton、switch事件监听与场景使用...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: compoundbutton(compo
- 下一篇: 大厂Android高级多套面试专题整理集