天天看点

RadioGroup里RadioButton显示多行实现(非常简单)

RadioGroup显示多行实现步骤

RadioGroup里面包裹的RadioButton的特性是单选和互斥,该种需求在项目中用到的比较多。

RadioButton实现多行显示的话就失去了本来的特性。

网上多数是自定义来处理这种需求,来实现单选和互斥。

本例子使用于比较少的按钮,你只需要把以前的代码稍作修改就能实现多行显示的效果。

介绍一下原来的需求

rb.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.btn1:
                    //其他操作
                        break;
                    case R.id.btn2:
                        //其他操作
                        break;
                    case R.id.btn3:
                    //其他操作
                        break;
                    case R.id.btn4:
                        //其他操作
                        break;
                    default:
                        break;
                }
            }
        });
           

以上就是使用单行的时候的写法,很简单,因为其他的事情都有系统代替做,但是如果他们不是RadioButton的直接子view上面的方法就接收不到回调了,这里就需要我们自己来做一些操作,测试发现虽然RadioButton的setOnCheckedChangeListener方法没有了回调,但是RadioButton的onCheckedChanged方法是一直都有回调的,所以在改方法中进行互斥的控制。如下代码:

@Override
 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                switch (buttonView.getId()) {
                    case R.id.btn1:
                        btn1.setChecked(true);
                        btn2.setChecked(false);
                        btn3.setChecked(false);
                        btn4.setChecked(false);
                    //其他操作
                        break;
                    case R.id.btn2:
                        btn1.setChecked(false);
                        btn2.setChecked(true);
                        btn3.setChecked(false);
                        btn4.setChecked(false);
                        //其他操作
                        break;
                    case R.id.btn3:
                        btn1.setChecked(false);
                        btn2.setChecked(false);
                        btn3.setChecked(true);
                        btn4.setChecked(false);
                    //其他操作
                        break;
                    case R.id.btn4:
                        btn1.setChecked(false);
                        btn2.setChecked(false);
                        btn3.setChecked(false);
                        btn4.setChecked(true);
                        //其他操作
                        break;
                    default:
                        break;
                }
            }
           

之所以采用上面的代码,是因为这样的改动相对是比较小的,并且对原来的逻辑基本上是没有变动,风险也较小。

写在结尾

上面这种比较适合RadioGroup里面包裹的RadioButton比较少的,太多的就不太合适,代码写出来看着比较臃肿。

继续阅读