Android RadioGroup多行顯示效果 解決單選問題
導(dǎo)語
如下圖所示,這是一個(gè)導(dǎo)航選擇彈框。進(jìn)行單項(xiàng)選擇,然后會監(jiān)聽回調(diào)選擇的事件。問題是Android的RadioButton是一般是放在RadioGroup中進(jìn)行管理的,而RadioGroup又是線性布局,即單行有效,多行無效。如圖那種就需要兩個(gè)RadioGroup來進(jìn)行合作。那么如果進(jìn)行合作呢?
分析:RadioGroup多行顯示其實(shí)就是兩個(gè)RadioGroup進(jìn)行切換,使用RadioGroup的clearCheck()方法進(jìn)行操作。
但是在使用clearCheck()之前,如果RadioGroup已經(jīng)設(shè)置過監(jiān)聽,執(zhí)行就會報(bào)StackOveflowError錯誤。
正確方法如下:
先調(diào)用
setOnCheckedChangeListener(null)
再調(diào)用
clearCheck()然后重新setOnCheckedChangeListener(checkedListener)。
案例代碼
1、布局如下:
<RadioGroup android:id="@+id/rg_manhole_state_one" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_toRightOf="@id/tv_manhole_state" android:orientation="horizontal" android:paddingTop="@dimen/padding_5"> <RadioButton android:id="@+id/rb_intact" android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@null" android:drawableLeft="@drawable/bg_radiobutten" android:drawablePadding="@dimen/padding_10" android:text="@string/intact" android:textColor="@color/white" android:textSize="@dimen/small_size" /> <RadioButton android:id="@+id/rb_lose" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:button="@null" android:drawableLeft="@drawable/bg_radiobutten" android:drawablePadding="@dimen/padding_10" android:text="@string/lose" android:textColor="@color/white" android:textSize="@dimen/small_size" /> <RadioButton android:id="@+id/rb_sunken" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:button="@null" android:drawableLeft="@drawable/bg_radiobutten" android:drawablePadding="@dimen/padding_10" android:text="@string/sunken" android:textColor="@color/white" android:textSize="@dimen/small_size" /> </RadioGroup> <RadioGroup android:id="@+id/rg_manhole_state_two" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/padding_100" android:layout_marginTop="5dp" android:orientation="horizontal" android:paddingTop="@dimen/padding_5"> <RadioButton android:id="@+id/rb_occupation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@null" android:drawableLeft="@drawable/bg_radiobutten" android:drawablePadding="@dimen/padding_10" android:text="@string/occupation" android:textColor="@color/white" android:textSize="@dimen/small_size" /> <RadioButton android:id="@+id/rb_damage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:button="@null" android:drawableLeft="@drawable/bg_radiobutten" android:drawablePadding="@dimen/padding_10" android:text="@string/damage" android:textColor="@color/white" android:textSize="@dimen/small_size" /> <RadioButton android:id="@+id/rb_heave" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:button="@null" android:drawableLeft="@drawable/bg_radiobutten" android:drawablePadding="@dimen/padding_10" android:text="@string/heave" android:textColor="@color/white" android:textSize="@dimen/small_size" /> </RadioGroup>
2、具體操作如下:
聲明控件:
@InjectView(R.id.rg_manhole_state_one) RadioGroup rgManholeStateOne; @InjectView(R.id.rg_manhole_state_two) RadioGroup rgManholeStateTwo;
設(shè)置監(jiān)聽:
rgManholeStateOne.setOnCheckedChangeListener(new OnMyManholeStateOneCheckedChangeListener()); rgManholeStateTwo.setOnCheckedChangeListener(new OnMyManholeStateTwoCheckedChangeListener());
實(shí)現(xiàn)單選:
private class OnMyManholeStateOneCheckedChangeListener implements RadioGroup.OnCheckedChangeListener { @Override public void onCheckedChanged(RadioGroup radioGroup, int position) { switch (position) { case R.id.rb_intact: if (rbIntact.isChecked()) rgManholeStateTwo.clearCheck(); break; case R.id.rb_lose: if (rbLose.isChecked()) rgManholeStateTwo.clearCheck(); break; case R.id.rb_sunken: if (rbSunken.isChecked()) rgManholeStateTwo.clearCheck(); break; } } } private class OnMyManholeStateTwoCheckedChangeListener implements RadioGroup.OnCheckedChangeListener { @Override public void onCheckedChanged(RadioGroup radioGroup, int position) { switch (position) { case R.id.rb_occupation: if (rbOccupation.isChecked()) rgManholeStateOne.clearCheck(); break; case R.id.rb_damage: if (rbDamage.isChecked()) rgManholeStateOne.clearCheck(); break; case R.id.rb_heave: if (rbHeave.isChecked()) rgManholeStateOne.clearCheck(); break; } } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)自動變換大小的ViewPager
- android?viewpager實(shí)現(xiàn)輪播效果
- Android使用ViewPager實(shí)現(xiàn)翻頁效果
- Android自定義View實(shí)現(xiàn)遙控器按鈕
- Android單選多選按鈕的使用方法
- Android實(shí)現(xiàn)單選按鈕
- Android 中使用RadioGroup和Fragment實(shí)現(xiàn)底部導(dǎo)航欄的功能
- Android基礎(chǔ)控件RadioGroup使用方法詳解
- Kotlin RadioGroup與ViewPager實(shí)現(xiàn)底層分頁按鈕方法
相關(guān)文章
Android自定義TextView仿微信朋友圈文字展開全文功能
這篇文章主要為大家詳細(xì)介紹了Android自定義TextView仿微信朋友圈文字展開全文功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06android利用handler實(shí)現(xiàn)倒計(jì)時(shí)功能
這篇文章主要為大家詳細(xì)介紹了android利用handler實(shí)現(xiàn)倒計(jì)時(shí)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11超過百萬的StackOverflow Flutter 20大問題(推薦)
這篇文章主要介紹了超過百萬的StackOverflow Flutter 問題,有的問題在stackoverflow上有幾十萬的閱讀量,說明很多人都遇到了這些問題,把這些問題整理分享給大家需要的朋友可以參考下2020-04-04Android實(shí)現(xiàn)屏幕旋轉(zhuǎn)四個(gè)方向準(zhǔn)確監(jiān)聽
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)屏幕旋轉(zhuǎn)四個(gè)方向準(zhǔn)確監(jiān)聽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07Android編程設(shè)計(jì)模式之備忘錄模式詳解
這篇文章主要介紹了Android編程設(shè)計(jì)模式之備忘錄模式,結(jié)合實(shí)例形式詳細(xì)分析了Android備忘錄模式的概念、原理、應(yīng)用場景、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2017-12-12Android編程實(shí)現(xiàn)獲取系統(tǒng)內(nèi)存、CPU使用率及狀態(tài)欄高度的方法示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)獲取系統(tǒng)內(nèi)存、CPU使用率及狀態(tài)欄高度的方法,涉及Android基于自定義類實(shí)現(xiàn)針對系統(tǒng)硬件信息的相關(guān)獲取操作技巧,需要的朋友可以參考下2017-08-08深入分析Android NFC技術(shù) android nfc開發(fā)
本篇文章我們對android開發(fā)中nfc技術(shù)做了全面的原理分析以及實(shí)現(xiàn)過程,需要的讀者們一起參考一下吧。2017-11-11