Radiobutton是一種單選按鈕,是由於RadioGroup管理下的一組按鈕,所以一旦其中的一個button選中,再點擊,就不能取消,想要取消調用Radiobutton的setchecked(boolean isChecked)的方法。
在網上找了許多法,發現都實現不了在RadioGroup中選中Radiobutton後再次點擊取消選中,於是自己查找資料後,最終得到了方法,和大家做個分享。
先看下結果展示:
本例子展示了2種方式來實現,
一:第一種實現方式
一種是單個 Radiobutton進行逐個設置setOnClickListener方法,通過setChecked
改變選中和取消的狀態,這種的問題在於如果有多個Radiobutton,相對而言就非常的耗時。不過我們可以先來看看它的具體實現。
mRadioBtDhhs.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setHcfs1(v, DHHS);
}
});
mRadioBtJmhs.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setHcfs1(v, JMHS);
}
});
mRadioBtZppd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setHcfs1(v, ZPPD);
}
});
setHcfs1方法:
private void setHcfs1(View view, String hcfs) {
if (hcfs.equals(mHsfs1)) {
((RadioButton) view).setChecked(false);
mHsfs1 = "";
} else {
mHsfs1 = hcfs;
((RadioButton) view).setChecked(true);
}
}
其中的mHsfs1參數是用來記錄每次選中的值。
二:第二種實現方式
第二種採用的是RadioGroup.getChildAt(i)的方式設置所有Radiobutton的setOnClickListener方法。這樣比較靈活,不管是有多少Radiobutton,也不需要額外的操作。
具體實現如下:
for (int i = 0; i < mRgHstj.getChildCount(); i++) {
mRgHstj.getChildAt(i).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
// 電話覈實
case R.id.radioBt_dhhs:
setHcfs(v, DHHS);
break;
// 見面覈實
case R.id.radioBt_jmhs:
setHcfs(v, JMHS);
break;
// 照片判斷
case R.id.radioBt_zppd:
setHcfs(v, ZPPD);
break;
}
}
});
}
其中mRgHstj是RadioGroup。
setHcfs方法的實現:
private void setHcfs(View view, String hcfs) {
if (hcfs.equals(mHsfs)) {
mRgHstj.clearCheck();
mHsfs = "";
} else {
mHsfs = hcfs;
mRgHstj.check(view.getId());
}
}
這裏用到了RadioGroup.clearCheck()方法,通過取消所有RadioButton的選中狀態達到取消選擇的效果。爲什麼這邊的實現不採用mHsfs1這個方法呢。經過測試得知在RadioGroup進行循環設置時 RadioButton.setChecked這個方法起不到改變選中狀態的效果。採用RadioGroup..check(view.getId())方法進行這種選中。
到此就ok了,基本的核心代碼都已經給出來了,如果願意下載的,具體的代碼可以看demo。