Android RadioGroup多行显示效果 解决单选问题
作者:艾阳丶 时间:2023-05-28 18:23:55
导语
如下图所示,这是一个导航选择弹框。进行单项选择,然后会监听回调选择的事件。问题是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;
}
}
}
来源:https://blog.csdn.net/csdn_aiyang/article/details/70242504
标签:Android,RadioGroup,多行显示
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android简单实现弹幕效果
2022-08-12 01:24:08
springboot如何读取配置文件到静态工具类
2023-11-28 04:44:54
![](https://img.aspxhome.com/file/2023/6/60036_0s.png)
C# WPF后台动态添加控件实战教程
2022-07-29 18:52:51
![](https://img.aspxhome.com/file/2023/5/76415_0s.png)
java通过Jsoup爬取网页过程详解
2021-12-20 03:24:10
Java执行cmd命令两种实现方法解析
2022-09-24 02:43:49
Mybatis-Plus字段策略FieldStrategy的使用
2023-12-13 14:44:41
![](https://img.aspxhome.com/file/2023/7/93077_0s.png)
深入理解Android中Scroller的滚动原理
2022-10-01 18:53:01
![](https://img.aspxhome.com/file/2023/4/130344_0s.png)
java实现图片转base64字符串 java实现base64字符串转图片
2023-07-19 10:42:44
![](https://img.aspxhome.com/file/2023/3/77353_0s.png)
基于NET Core 的Nuget包制作、发布和运用流程解析(完整过程)
2022-03-10 01:09:29
![](https://img.aspxhome.com/file/2023/1/96401_0s.jpg)
Spring与Hibernate整合事务管理的理解
2023-10-24 16:27:41
Java 数组获取最大和最小值的实例实现
2021-06-18 15:53:06
![](https://img.aspxhome.com/file/2023/2/77462_0s.png)
SpringBoot Bean被加载时进行控制
2022-10-01 14:06:53
![](https://img.aspxhome.com/file/2023/3/74773_0s.png)
详解Mybatis动态sql
2023-09-16 15:41:38
![](https://img.aspxhome.com/file/2023/4/69924_0s.png)
Android BottomSheet实现可拉伸控件
2023-07-05 15:07:51
Java 中实现随机无重复数字的方法
2022-07-06 15:57:37
MyBatis-Plus多表联查(动态查询)的项目实践
2023-11-19 21:43:17
![](https://img.aspxhome.com/file/2023/3/59663_0s.png)
Android实现雷达View效果的示例代码
2022-09-27 11:39:52
![](https://img.aspxhome.com/file/2023/1/139381_0s.jpg)
Android Studio中Logcat写入和查看日志
2021-08-05 12:37:18
![](https://img.aspxhome.com/file/2023/9/106019_0s.png)
Unity3d获取系统时间
2023-10-20 00:28:56
Java多线程下的单例模式参考
2023-11-09 00:40:15