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

 

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值