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比较少的,太多的就不太合适,代码写出来看着比较臃肿。