Android RadioGroup多行显示效果 解决单选问题
时间:2022-07-27
本文章向大家介绍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;
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Go 常见并发模式实现(二):通过缓冲通道实现共享资源池
- 在 Linux 终端中查找域名 IP 地址的命令(五种方法)
- Laravel 表单方法伪造与 CSRF 攻击防护
- Java图形验证码支持gif、中文、算术等
- Go 常见并发模式实现(三):通过无缓冲通道创建协程池
- Linux下安装SVN服务端的方法步骤
- SSM项目频繁打成war包部署,使用tomcat和maven实现热部署配置
- Laravel 视图使用入门
- 基于 Go 协程实现图片马赛克应用(上):同步版本
- Blade 模板引擎入门篇
- 基于 Go 协程实现图片马赛克应用(下):并发重构
- Python入门教程笔记(三)数组
- Greenplum集群Master与Standby相互切换
- Java基础知识三问—百度真题
- 访问权限导致toString返回空BUG分享