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


猜你喜欢
- 我们在打包的过程中,需要对代码进行混淆处理,可项目中需要混淆的地方很多,特别是添加依赖的,如果要我们一个一个添加,无疑这大大的添加了我们的工
- 1. 概述官方JavaDocsApi: java.awt.BorderLayout BorderLayout,边界布局管理器。它把 Cont
- 弃用内容先来纠正一个误区。主要之前在版本更新介绍的时候,存在一些表述上的问题。导致部分读者认为这次的更新是Datasource本身初始化的调
- 今天给大家带来一篇简单易懂的微技巧文章,并没有什么高深的技术点,但重点是在细节,相信可以给不少朋友带来帮助。Dialog和Toast所有人肯
- 前言标签(Label)控件是最常用的控件,在任何Windows应用程序中都可以中都可以看到标签控件。标签控件用于显示用户不能编辑的文件或图像
- 有时候,我们在同一个activity里面有很多fragment,在横竖屏的时候,有些fragment要求重新加载数据,有些不需要,如何简单控
- 废话不多说了,直奔主题了。需要两个jar包:commons-fileupload.jarCommons IO的jar包(本文使用common
- Java 存储模型和共享对象详解很多程序员对一个共享变量初始化要注意可见性和安全发布(安全地构建一个对象,并其他线程能正确访问)等问题不是很
- Mybatis事务管理我们可以在mybatis-config.xml中配置事务管理器的实现<transactionManager ty
- 最近在做一个项目涉及到将包含图片的简单网页下载到本地,方便离线时观看,在这里分享一下,大家做下简单修改就可以用到自己的项目中了。(这里用到了
- 归并排序简单解释:该算法是采用分治法,把数组不断分割,直至成为单个元素,然后比较再合并(合并的过程就是两部分分别从头开始比较,取出最小或最大
- 这篇文章主要介绍了Java集合使用 Iterator 删除元素,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- Java io简介Java io系统的设计初衷,就是为了实现“文件、控制台、网络设备”这些io设置的通信。例如,对于一个文件,我们可以打开文
- 项目中用到WebView加上进度条放在顶部,让用户知道加载进度情况,可以提高用户体验:效果:布局:<RelativeLayoutand
- 什么是FlutterFlutter 是谷歌推出的开发移动UI框架,可以快速的在IOS和Android上构建高质量的原生用户界面。Flutte
- 本文实例为大家分享了Android实现滑动屏幕切换图片的具体代码,供大家参考,具体内容如下activity_main.xml 文件代码:&l
- rpc远程调用可能存在的问题超时的问题。安全的问题。服务与服务之间URL地址管理。在我们的微服务架构通讯,服务之间依赖关系非常大,如果通过传
- 文件上传在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以common
- 在安全卫生上,经常看到有圆形的进度条在转动,效果非常好看,于是就尝试去实现一下,具体实现过程不多说了,直接上效果图,先炫耀下。效果图:分析:
- 在 Kotlin 中,reduce() 和 fold() 是函数式编程中常用的高阶函数。它们都是对集合中的元素进行聚合操作的函数,将一个集合