前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RadioButton实现选择后可取消选择

RadioButton实现选择后可取消选择

作者头像
砸漏
发布2020-10-16 11:14:11
2.2K0
发布2020-10-16 11:14:11
举报
文章被收录于专栏:恩蓝脚本

Radiobutton是一种单选按钮,是由于RadioGroup管理下的一组按钮,所以一旦其中的一个button选中,再点击,就不能取消,想要取消调用Radiobutton的setchecked(boolean isChecked)的方法。

在网上找了许多法,发现都实现不了在RadioGroup中选中Radiobutton后再次点击取消选中,于是自己查找资料后,最终得到了方法,和大家做个分享。

先看下结果展示:

本例子展示了2种方式来实现,

一、第一种实现方式

一种是单个 Radiobutton进行逐个设置setOnClickListener方法,通过setChecked

改变选中和取消的状态,这种的问题在于如果有多个Radiobutton,相对而言就非常的耗时。不过我们可以先来看看它的具体实现。

代码语言:javascript
复制
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方法:

代码语言:javascript
复制
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,也不需要额外的操作。

具体实现如下:

代码语言:javascript
复制
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。

代码语言:javascript
复制
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。

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档