RadioButton實(shí)現(xiàn)選擇后可取消選擇
Radiobutton是一種單選按鈕,是由于RadioGroup管理下的一組按鈕,所以一旦其中的一個button選中,再點(diǎn)擊,就不能取消,想要取消調(diào)用Radiobutton的setchecked(boolean isChecked)的方法。
在網(wǎng)上找了許多法,發(fā)現(xiàn)都實(shí)現(xiàn)不了在RadioGroup中選中Radiobutton后再次點(diǎn)擊取消選中,于是自己查找資料后,最終得到了方法,和大家做個分享。
先看下結(jié)果展示:
本例子展示了2種方式來實(shí)現(xiàn),
一、第一種實(shí)現(xiàn)方式
一種是單個 Radiobutton進(jìn)行逐個設(shè)置setOnClickListener方法,通過setChecked
改變選中和取消的狀態(tài),這種的問題在于如果有多個Radiobutton,相對而言就非常的耗時。不過我們可以先來看看它的具體實(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ù)是用來記錄每次選中的值。
二、第二種實(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; // 見面核實(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()方法,通過取消所有RadioButton的選中狀態(tài)達(dá)到取消選擇的效果。為什么這邊的實(shí)現(xiàn)不采用mHsfs1這個方法呢。經(jīng)過測試得知在RadioGroup進(jìn)行循環(huán)設(shè)置時 RadioButton.setChecked這個方法起不到改變選中狀態(tài)的效果。采用RadioGroup..check(view.getId())方法進(jìn)行這種選中。
到此就ok了,基本的核心代碼都已經(jīng)給出來了,如果愿意下載的,具體的代碼可以看demo。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android kotlin+協(xié)程+Room數(shù)據(jù)庫的簡單使用
這篇文章主要介紹了Android kotlin+協(xié)程+Room數(shù)據(jù)庫的簡單使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01詳解android在mob平臺實(shí)現(xiàn)qq登陸和分享
這篇文章主要介紹了詳解android在mob平臺實(shí)現(xiàn)qq登陸和分享,對接入第三方平臺SDK感興趣的同學(xué)們,可以參考下2021-04-04基于RecyclerView實(shí)現(xiàn)橫向GridView效果
這篇文章主要為大家詳細(xì)介紹了基于RecyclerView實(shí)現(xiàn)橫向GridView效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07Android和JavaScript相互調(diào)用的方法
這篇文章主要介紹了Android和JavaScript相互調(diào)用的方法,實(shí)例分析了Android的WebView執(zhí)行JavaScript及JavaScript訪問Android的技巧,需要的朋友可以參考下2015-12-12Android App中實(shí)現(xiàn)圖片異步加載的實(shí)例分享
這篇文章主要介紹了Android App中實(shí)現(xiàn)圖片異步加載的實(shí)例分享,這樣GridView在加載大量圖片時便可以延時分布顯示,需要的朋友可以參考下2016-04-04Android模糊處理簡單實(shí)現(xiàn)毛玻璃效果
這篇文章主要介紹了Android模糊處理簡單實(shí)現(xiàn)毛玻璃效果的相關(guān)資料,需要的朋友可以參考下2016-02-02