RadioButton實(shí)現(xiàn)選擇后可取消選擇
Radiobutton是一種單選按鈕,是由于RadioGroup管理下的一組按鈕,所以一旦其中的一個(gè)button選中,再點(diǎn)擊,就不能取消,想要取消調(diào)用Radiobutton的setchecked(boolean isChecked)的方法。
在網(wǎng)上找了許多法,發(fā)現(xiàn)都實(shí)現(xiàn)不了在RadioGroup中選中Radiobutton后再次點(diǎn)擊取消選中,于是自己查找資料后,最終得到了方法,和大家做個(gè)分享。
先看下結(jié)果展示:

本例子展示了2種方式來(lái)實(shí)現(xiàn),
一、第一種實(shí)現(xiàn)方式
一種是單個(gè) Radiobutton進(jìn)行逐個(gè)設(shè)置setOnClickListener方法,通過(guò)setChecked
改變選中和取消的狀態(tài),這種的問(wèn)題在于如果有多個(gè)Radiobutton,相對(duì)而言就非常的耗時(shí)。不過(guò)我們可以先來(lái)看看它的具體實(shí)現(xiàn)。
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參數(shù)是用來(lái)記錄每次選中的值。
二、第二種實(shí)現(xiàn)方式
第二種采用的是RadioGroup.getChildAt(i)的方式設(shè)置所有Radiobutton的setOnClickListener方法。這樣比較靈活,不管是有多少Radiobutton,也不需要額外的操作。
具體實(shí)現(xiàn)如下:
for (int i = 0; i < mRgHstj.getChildCount(); i++) {
mRgHstj.getChildAt(i).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
// 電話核實(shí)
case R.id.radioBt_dhhs:
setHcfs(v, DHHS);
break;
// 見(jiàn)面核實(shí)
case R.id.radioBt_jmhs:
setHcfs(v, JMHS);
break;
// 照片判斷
case R.id.radioBt_zppd:
setHcfs(v, ZPPD);
break;
}
}
});
}
其中mRgHstj是RadioGroup。
setHcfs方法的實(shí)現(xiàn):
private void setHcfs(View view, String hcfs) {
if (hcfs.equals(mHsfs)) {
mRgHstj.clearCheck();
mHsfs = "";
} else {
mHsfs = hcfs;
mRgHstj.check(view.getId());
}
}
這里用到了RadioGroup.clearCheck()方法,通過(guò)取消所有RadioButton的選中狀態(tài)達(dá)到取消選擇的效果。為什么這邊的實(shí)現(xiàn)不采用mHsfs1這個(gè)方法呢。經(jīng)過(guò)測(cè)試得知在RadioGroup進(jìn)行循環(huán)設(shè)置時(shí) RadioButton.setChecked這個(gè)方法起不到改變選中狀態(tài)的效果。采用RadioGroup..check(view.getId())方法進(jìn)行這種選中。
到此就ok了,基本的核心代碼都已經(jīng)給出來(lái)了,如果愿意下載的,具體的代碼可以看demo。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android kotlin+協(xié)程+Room數(shù)據(jù)庫(kù)的簡(jiǎn)單使用
這篇文章主要介紹了Android kotlin+協(xié)程+Room數(shù)據(jù)庫(kù)的簡(jiǎn)單使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
詳解android在mob平臺(tái)實(shí)現(xiàn)qq登陸和分享
這篇文章主要介紹了詳解android在mob平臺(tái)實(shí)現(xiàn)qq登陸和分享,對(duì)接入第三方平臺(tái)SDK感興趣的同學(xué)們,可以參考下2021-04-04
基于RecyclerView實(shí)現(xiàn)橫向GridView效果
這篇文章主要為大家詳細(xì)介紹了基于RecyclerView實(shí)現(xiàn)橫向GridView效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Android和JavaScript相互調(diào)用的方法
這篇文章主要介紹了Android和JavaScript相互調(diào)用的方法,實(shí)例分析了Android的WebView執(zhí)行JavaScript及JavaScript訪問(wèn)Android的技巧,需要的朋友可以參考下2015-12-12
Android App中實(shí)現(xiàn)圖片異步加載的實(shí)例分享
這篇文章主要介紹了Android App中實(shí)現(xiàn)圖片異步加載的實(shí)例分享,這樣GridView在加載大量圖片時(shí)便可以延時(shí)分布顯示,需要的朋友可以參考下2016-04-04
Android模糊處理簡(jiǎn)單實(shí)現(xiàn)毛玻璃效果
這篇文章主要介紹了Android模糊處理簡(jiǎn)單實(shí)現(xiàn)毛玻璃效果的相關(guān)資料,需要的朋友可以參考下2016-02-02

