我试图用四个切换按钮实现一个无线电组。期望的行为是典型的单选组行为:一个按钮被预选,如果用户点击另一个按钮,前一个按钮被取消选择,而新的按钮被选中。如果用户再次单击选定的按钮,则不会发生任何事情,因为不允许选择任何按钮。这就是我遇到问题的地方。我遵循了这个问题的解决方案:Android: How to get a radiogroup with togglebuttons?
不幸的是,用户仍然能够取消选择活动按钮。我怎样才能防止这种情况?
这是我的代码:
ToggleButtons 的 onClick 侦听器:
/**
* Handler for onClick Events.
*/
@Override
public void onClick(View v) {
if (viewListener == null) {
return;
}
if (v == tb_one|| v == tb_two|| v == tb_three|| v == tb_four) {
((RadioGroup) v.getParent()).check(v.getId());
}
else {
super.onClick(v);
}
}
我的自定义 OnCheckedChangeListener:
/**
* The listener for a checked change event of the toggle buttons.
*/
static final RadioGroup.OnCheckedChangeListener ToggleListener = new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(final RadioGroup radioGroup, final int i) {
//if one button is checked, uncheck all others
for (int j = 0; j < radioGroup.getChildCount(); j++) {
final ToggleButton view = (ToggleButton) radioGroup.getChildAt(j);
view.setChecked(view.getId() == i);
}
}
};
这里是我添加监听器的地方:(它在 onFinishInflate 方法中)
((RadioGroup) findViewById(R.id.instant_toggleGroup_mode))
.setOnCheckedChangeListener(ToggleListener);
tb_one = (ToggleButton) findViewById(R.id.instant_tb_one);
tb_one.setOnClickListener(this);
tb_two = (ToggleButton) findViewById(R.id.instant_tb_two);
tb_two.setOnClickListener(this);
tb_three = (ToggleButton) findViewById(R.id.instant_tb_three);
tb_three.setOnClickListener(this);
tb_four = (ToggleButton) findViewById(R.id.instant_tb_four);
tb_four.setOnClickListener(this);
如果有人可以向我指出解决方案,那就太好了!