我正在以编程方式设计自定义表单,用户可以在其中提出问题,并可以使用单选按钮添加多个选项。我已经采用RadioGroup,我正在添加单选按钮。但是在选择时我希望一次只能选择一个单选按钮。如何以编程方式实现它。请帮帮我..
这是我的代码
final RadioGroup radioGroup = new RadioGroup(getApplicationContext());
radioGroup.setId(1);
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
RadioButton radioButtonView = new RadioButton(getApplicationContext());
radioButtonView.setId(i++);
radioButtonView.setText(addnew);
radioGroup.addView(radioButtonView, p);
loption.addView(radioGroup, p);
提前致谢,
答案 0 :(得分:2)
您似乎正在为每个RadioGroup
制作新的RadioButton
。
您应该将每个新RadioButton
添加到同一个RadioGroup
。然后,RadioGroup
会确保当时只能选择一个RadioButton
。
答案 1 :(得分:2)
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.d(TAG, "onCheckedChanged " + buttonView.getId());
mRadioGroup.clearCheck();
if (isChecked) {
mRadioGroup.check(buttonView.getId());
}
}
答案 2 :(得分:1)
当我插入LinearLayout将radiobuttons放入网格时,我尝试了同样的问题。
我解决了这个问题。 考虑到我们有更多的RadioGroups,我们知道被按下的RadioButton。因此,只需从所有RadioGroup中删除侦听器,然后取消选择所有RadioButtons,将onCheckedChangeListener重置为RadioGroup。这是我的代码:
onCheckedChangeListener= new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
clearAllRadioButton();
((RadioButton) binding.getRoot().findViewById(i)).setChecked(true);
resetListenerRadioGroup();
}
};
onCheckedChangeListener2 = new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
clearAllRadioButton();
((RadioButton) binding.getRoot().findViewById(i)).setChecked(true);
resetListenerRadioGroup();
}
};
binding.rg.setOnCheckedChangeListener(onCheckedChangeListener);
binding.rg2.setOnCheckedChangeListener(onCheckedChangeListener2);
private void clearAllRadioButton() {
binding.rg2.setOnCheckedChangeListener(null);
binding.rg.setOnCheckedChangeListener(null);
binding.failed.setChecked(false);
binding.draft.setChecked(false);
binding.sent.setChecked(false);
binding.inbox.setChecked(false);
}
private void resetListenerRadioGroup(){
binding.rg2.setOnCheckedChangeListener(onCheckedChangeListener2);
binding.rg.setOnCheckedChangeListener(onCheckedChangeListener);
}
*不要使用radioButton的clearCheck(),因为它在重置监听器时响应不好。
答案 3 :(得分:0)
检查一下它会对你有用:
首先获取RadioButton:
RadioButton radioBalls = (RadioButton) findViewById(R.id.radioGameInPlayBalls);
RadioButton radioTime = (RadioButton) findViewById(R.id.radioGameInPlayTime);
radioBalls.setOnCheckedChangeListener(this);
radioTime.setOnCheckedChangeListener(this);
现在在@overide method:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean c) {
switch (buttonView.getId()) {
case R.id.radioGameInPlayBalls:
if (radioTime.isChecked() && c) {
radioBalls.setChecked(false);
return;
}
radioBalls.setEnabled(c);
break;
case R.id.radioGameInPlayTime:
if (radioBalls.isChecked() && c) {
radioTime.setChecked(false);
return;
}
radioTime.setEnabled(c);
break;
default:
break;
}
}
答案 4 :(得分:0)
您应该使用RadioGroup检查单选按钮,而不是直接使用单选按钮。下面,我从选项列表中填充无线电组,并获取要检查的选项的单选按钮ID,并在填充无线电组后检查相应的按钮。如果您通过索引确定选中选项,则同样如此。
int checkedId = -1;
for(JsonElement option : options){
RadioButton radioButton = new RadioButton(getContext());
radioGroup.addView(radioButton);
if(checkedOptionId.equals(id)){
checkedId = radioButton.getId();
}
}
radioGroup.check(checkedId);