RadioButton实现选择后可取消选择
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。
以上就是本文的全部内容,希望对大家的学习有所帮助。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kafka监控必备——Kafka-Eagle 2.0.2正式发布
- 安防/教育/互联网直播视频组件EasyRTSPServer读取本地文件报错找不到EasyStreamClient.dll解决方法
- C语言编程入门之--第六章C语言控制语句
- RTSP网络摄像头网页无插件直播视频平台EasyNVR自定义标题和CopyRight步骤
- 设计模式~解释器
- RTSP/GB28181/HIKSDK/Ehome协议视频上云服务平台EasyCVR人脸识别开发ArcSoftFace环境搭建
- RTSP/GB28181/HIKSDK/EHome流媒体协议视频上云网关EasyCVR流地址密码不正确如何修正?
- tmux终端意外出现控制字符
- clickhouse编译安装以及搭建mysql实时复制
- Linux回收站机制实现过程及用法详解
- Linux如何基于AIDE检测文件系统完整性
- MySQL压测时Linux中断异常飚高,原来是因为...
- Ubuntu20.04防火墙设置简易教程(小白)
- linux上搭建私有Git服务器的详细教程
- Centos7 安装 Mysql8教程