当前位置: 首页 > 编程笔记 >

RadioButton实现选择后可取消选择

孔飞舟
2023-03-14
本文向大家介绍RadioButton实现选择后可取消选择,包括了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。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程

 类似资料:
  • 问题内容: 大约一个月前,米特的问题没有得到解答。可悲的是,我现在遇到了同样的情况。 情况如下:我正在使用jQuery捕获单选按钮中的更改。选择单选按钮后,我将启用一个编辑框。当取消选择单选按钮时,我希望禁用编辑框。 使能的作品。当我在组中选择其他单选按钮时, 不会 触发该事件。有谁知道如何解决这一问题? __ 问题答案: 看起来该函数仅在您选中单选按钮时才调用,而不是在取消选中它时才调用。我使用

  • 在学完 Button 之后,我们已经可以和用户产生一定的互动了,但仅仅这些还远远不够,很多时候我们需要给用户提供一些选项,比如“记住密码”、“自动登录”、“投票”等场景,我们需要提供一个或者多个选项给用户勾选。这种场景下就可以使用 RadioButton 和 Checkbox ,这二者的区别就是前者是单选,而后者支持多选。 1. RadioButton RadioButton 和 Checkbox

  • 在我取消选中RadioButton或单击组中的另一个RadioButton后,我的RadioButton组中的RadioButton会留下一个黑色的复选框。如何防止这种情况发生? 发生在我的API 19真实设备上,而不是我的API 27 编辑:_________________________________________________ 尝试使用无法使用的自定义选择器 主题: Bump还是找不

  • 本文向大家介绍jQuery实现复选框全选/取消全选/反选及获得选择的值,包括了jQuery实现复选框全选/取消全选/反选及获得选择的值的使用技巧和注意事项,需要的朋友参考一下

  • 我正在开发一个使用JTree的java应用程序。我想归档的是,当我点击一个已经被选中的节点时,它会被取消选中。 我目前的解决方案是向jtree添加鼠标侦听器和树选择侦听器。但问题是,valueChanged只有在选择发生更改时才会被调用(而不是在两次选择同一节点时)。为了解决这个问题,我添加了一个布尔值,它指示是否第一次单击了节点,然后我在MouseRelease函数中处理取消选择。这是可行的,但

  • 本文向大家介绍JavaScript实现复选框全选和取消全选,包括了JavaScript实现复选框全选和取消全选的使用技巧和注意事项,需要的朋友参考一下 JS网页–全选和取消全选,供大家参考,具体内容如下 表格,初始状态下复选框都是未选中状态,选中表头的复选框后,下面几个复选框变为选中状态,取消表头复选框选中状态后,下面几个复选框选中状态也随之取消;下面的几个复选框同时选中时,表头的复选框也随之选中