RadioButton实现选择后可取消选择
作者:天兰之珠 时间:2023-10-15 23:50:39
Radiobutton是一种单选按钮,是由于RadioGroup管理下的一组按钮,所以一旦其中的一个button选中,再点击,就不能取消,想要取消调用Radiobutton的setchecked(boolean isChecked)的方法。
在网上找了许多法,发现都实现不了在RadioGroup中选中Radiobutton后再次点击取消选中,于是自己查找资料后,最终得到了方法,和大家做个分享。
先看下结果展示:
本例子展示了2种方式来实现,
一、第一种实现方式
一种是单个 Radiobutton进行逐个设置setOnClickListener方法,通过setChecked
改变选中和取消的状态,这种的问题在于如果有多个Radiobutton,相对而言就非常的耗时。不过我们可以先来看看它的具体实现。
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参数是用来记录每次选中的值。
二、第二种实现方式
第二种采用的是RadioGroup.getChildAt(i)的方式设置所有Radiobutton的setOnClickListener方法。这样比较灵活,不管是有多少Radiobutton,也不需要额外的操作。
具体实现如下:
for (int i = 0; i < mRgHstj.getChildCount(); i++) {
mRgHstj.getChildAt(i).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
// 电话核实
case R.id.radioBt_dhhs:
setHcfs(v, DHHS);
break;
// 见面核实
case R.id.radioBt_jmhs:
setHcfs(v, JMHS);
break;
// 照片判断
case R.id.radioBt_zppd:
setHcfs(v, ZPPD);
break;
}
}
});
}
其中mRgHstj是RadioGroup。
setHcfs方法的实现:
private void setHcfs(View view, String hcfs) {
if (hcfs.equals(mHsfs)) {
mRgHstj.clearCheck();
mHsfs = "";
} else {
mHsfs = hcfs;
mRgHstj.check(view.getId());
}
}
这里用到了RadioGroup.clearCheck()方法,通过取消所有RadioButton的选中状态达到取消选择的效果。为什么这边的实现不采用mHsfs1这个方法呢。经过测试得知在RadioGroup进行循环设置时 RadioButton.setChecked这个方法起不到改变选中状态的效果。采用RadioGroup..check(view.getId())方法进行这种选中。
到此就ok了,基本的核心代码都已经给出来了,如果愿意下载的,具体的代码可以看demo。
来源:https://blog.csdn.net/u012693479/article/details/97894368
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
springboot2.x只需两步快速整合log4j2的方法
不知道面试会不会问Lambda怎么用(推荐)
MybatisPlus多表连接查询的问题及解决方案
![](https://img.aspxhome.com/file/2023/8/60348_0s.png)
hadoop是什么语言
![](https://img.aspxhome.com/file/2023/0/70970_0s.png)
Android4.4 WebAPI实现拍照上传功能
SpringBoot配置GlobalExceptionHandler全局异常处理器案例
![](https://img.aspxhome.com/file/2023/6/60626_0s.png)
Java实现聊天室界面
Netty与NIO超详细讲解
![](https://img.aspxhome.com/file/2023/2/65362_0s.png)
c#集合快速排序类实现代码分享
详解直接插入排序算法与相关的Java版代码实现
![](https://img.aspxhome.com/file/2023/5/72635_0s.png)
java身份证合法性校验并提取身份证有效信息
使用@符号让C#中的保留字做变量名的方法详解
![](https://img.aspxhome.com/file/2023/7/82127_0s.png)
基于java实现租车管理系统
![](https://img.aspxhome.com/file/2023/8/73038_0s.jpg)
C#如何让winform程序中的输入文本框保留上次的输入
![](https://img.aspxhome.com/file/2023/2/92872_0s.jpg)
基于Mybatis Plus实现代码生成器CodeGenerator
![](https://img.aspxhome.com/file/2023/4/130904_0s.png)
springboot 返回json格式数据时间格式配置方式
Android自定义wheelview实现滚动日期选择器
![](https://img.aspxhome.com/file/2023/6/129036_0s.png)
C#使用NPOI上传excel
![](https://img.aspxhome.com/file/2023/1/94561_0s.jpg)
Spring Boot如何通过自定义注解实现日志打印详解
![](https://img.aspxhome.com/file/2023/1/78891_0s.png)