Android RadioGroup多行顯示,解決單選問
導語
如下圖所示,這是一個導航選擇彈框。進行單項選擇,然後會監聽回撥選擇的事件。問題是Android的RadioButton是一般是放在RadioGroup中進行管理的,而RadioGroup又是線性佈局,即單行有效,多行無效。如圖那種就需要兩個RadioGroup來進行合作。那麼如果進行合作呢?
分析:RadioGroup多行顯示其實就是兩個RadioGroup進行切換,使用RadioGroup的clearCheck()方法進行操作。
但是在使用clearCheck()之前,如果RadioGroup已經設定過監聽,執行就會報StackOveflowError錯誤。
正確方法如下:
先呼叫
setOnCheckedChangeListener(null)
再呼叫
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;
設定監聽:
rgManholeStateOne.setOnCheckedChangeListener(new OnMyManholeStateOneCheckedChangeListener());
rgManholeStateTwo.setOnCheckedChangeListener(new OnMyManholeStateTwoCheckedChangeListener());
實現單選
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;
}
}
}
相關文章
- Android:EditText 多行顯示Android
- 快速解決新建選單隻顯示資料夾選項問題
- Dev RadioGroup 用法(項橫排顯示、項選中)dev
- Win10系統右鍵選單隻顯示圖示不顯示文字的解決方法Win10
- Android在Dialog中顯示PopupWindow不全問題解決Android
- 解決arcgis for android中feature不顯示的問題Android
- Windows11恢復經典的右鍵選單:一條命令解決顯示更多選項問題Windows
- Windows10系統開始選單顯示全屏的解決方法Windows
- css3多行文字多行文字縮略點選更多展開顯示全部CSSS3
- pyecharts地圖功能,並解決顯示不全或只顯示南海諸島問題解決Echarts地圖
- 解決CentOS 中顯示亂碼問題CentOS
- Win10系統中下級選單顯示延遲的解決方法Win10
- CSS3多行顯示省略號...CSSS3
- CSS實現單行、多行文字溢位顯示省略號CSS
- CSS實現單行、多行文字溢位顯示省略號(…)CSS
- PyQT5之單行文字輸入到多行顯示窗QT
- 滑鼠經過顯示下拉選單
- 在頂部顯示下拉選單
- Java解決Itext pdf中文不顯示問題Java
- sqlplus 顯示問號,解決辦法SQL
- 關於Spyder在高解析度顯示器下的選單圖示顯示不正確問題
- ElementUI側邊欄導航選單隱藏顯示問題UI
- [提問交流]後臺新增自定義選單左側不顯示子選單的進
- android studio佈局突然顯示不全解決方案Android
- 成功解決github無法顯示圖片問題Github
- 解決json顯示日期帶T的問題。JSON
- LINUX SSH顯示中文亂碼問題解決Linux
- JSP顯示中文問題的解決方案(轉)JS
- HPUX下,解決xmanager的顯示亂碼問題UX
- archlinux下wps顯示問題解決方法Linux
- 若依解決VUE前端時間顯示問題Vue前端
- LiveCharts中文顯示亂碼問題的解決Echarts
- css 多行文字溢位省略號顯示CSS
- IDEA 如何設定TAB頁顯示多行Idea
- navicat 表中文顯示? 解決
- Android EditText多行顯示並支援修改軟鍵盤右下角按鈕Android
- bootstrap 選單導航選單nav li滑鼠移入hover下拉顯示boot
- 【菜鳥學安卓】- TextView 顯示Html 一 解決圖片顯示不了的小問題安卓TextViewHTML