最近需要做一个过滤的功能,需求如下:多个条件只能单选,并且选中之后点击能取消选中。
效果图如下:

毫无疑问技术选型就是 RadioGroup + RadioButton 。但是RadioButton 无法想CheckBox 一样选中之后再进行取消选中,网上解决方案很雷人,写了一大堆其实目的就是通过一个标识进行标记是否是上次选中的,然后手动设置选中状态。这个时候巧妙利用View的tag轻松结束.解决代码如下:
- private void checkRgSelected(RadioGroup radioGroup){
- for (int i = 0; i < radioGroup.getChildCount(); i++) {
- int tagPos = i;
- radioGroup.getChildAt(i).setOnClickListener(v -> {
- Integer tag = (Integer) radioGroup.getTag();
- if(tag == null){
- //第一次选中点击
- radioGroup.clearCheck();
- radioGroup.check(v.getId());
- radioGroup.setTag(tagPos);
- }else{
- //是否是上一次选中点击的,如果是说明是重复点击,取消选中
- if(tag == tagPos){
- radioGroup.clearCheck();
- radioGroup.setTag(null);
- }else{
- radioGroup.check(v.getId());
- radioGroup.setTag(tagPos);
- }
- }
- });
- }
- }
所以有时候碰到问题多思考一下还是很有必要的,不要做简单的程序员,找到最简单的实现方式,如果有更简单的欢迎留言指点指点,拜托拜托~