7

我正在以编程方式设计自定义表单,用户可以在其中提出问题并可以使用单选按钮添加多个选项。我已经使用了 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);

提前致谢,

4

5 回答 5

3
 @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        Log.d(TAG, "onCheckedChanged  " + buttonView.getId());
        mRadioGroup.clearCheck();
        if (isChecked) {
            mRadioGroup.check(buttonView.getId());
        }
    }
于 2015-10-30T08:03:57.330 回答
2

看来您正在RadioGroup为每个RadioButton.

您应该将每个新的添加RadioButton到相同的RadioGroup. 然后RadioGroup将确保当时只能RadioButton选择一个。

于 2014-02-18T11:49:39.563 回答
1

当我插入 LinearLayout 以将单选按钮放入网格时,我尝试过同样的问题。

我是这样解决的。考虑到我们有更多的 RadioGroup,我们知道被按下的 RadioButton。出于这个原因,只需从您的所有 RadioGroups 中删除侦听器,然后取消选择所有 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(),因为它在重置监听器时反应不好。

于 2017-09-23T14:30:38.277 回答
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;
    }



}
于 2014-02-18T11:47:38.070 回答
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);
于 2016-07-14T13:16:29.893 回答