如何设置单选按钮作为默认选中的无线电组?

我动态地创建了 RadioGroupRadioButton,如下所示:

RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);


radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");


radioBtn2.setChecked(true);


radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);

这里的步骤 radioBtn2.setChecked(true);导致 radioBtn2总是被检查。这意味着我不能通过检查其他两个单选按钮(radioBtn1radioBtn3)来取消选中 radioBtn2。我想使 RadioGroup一次只能检查一个单选按钮(现在它可以一次检查两个单选按钮)。

我怎样才能解决这个问题?

187314 次浏览

你应该像这样检查无线电组的无线电按钮:

radiogroup.check(IdOfYourButton)

当然,您首先必须将 Id 设置为单选按钮

编辑: 我忘了,radioButton.getId()也可以,谢谢拉梅什

编辑2:

android:checkedButton="@+id/my_radiobtn"

在 Radigroup xml 中工作

    RadioGroup radioGroup = new RadioGroup(WvActivity.this);
RadioButton radioBtn1 = new RadioButton(this);
RadioButton radioBtn2 = new RadioButton(this);
RadioButton radioBtn3 = new RadioButton(this);


radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");




radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);


radioGroup.check(radioBtn2.getId());

我同事的代码也有同样的问题。这听起来是因为您的收音机组没有正确设置您的收音机按钮。这就是您可以多重选择单选按钮的原因。我尝试了很多事情,最后我做了一个把戏,其实是错误的,但工程罚款。

for ( int i = 0 ; i < myCount ; i++ )
{
if ( i != k )
{
System.out.println ( "i = " + i );
radio1[i].setChecked(false);
}
}

这里我设置了一个 for 循环,它检查可用的单选按钮,并取消选择除了新单击的按钮之外的每一个按钮。试试看。

RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);


radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");


radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);
radioBtn2.setChecked(true);

对于 xml 属性,它的 android:checkedButton接受要检查的 RadioButtonid

<RadioGroup
...
...
android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
... >....</RadioGroup>

在 XML 文件中,在 RadioGroup中设置 android:checkedButton字段,其 id 为默认的 RadioButton:

<RadioGroup
....
android:checkedButton="@+id/button_1">


<RadioButton
android:id="@+id/button_1"
...../>


<RadioButton
android:id="@+id/button_2"
...../>


<RadioButton
android:id="@+id/button_3"
...../>
</RadioGroup>

是 RadioGroup 的窃听器

RadioButton radioBtn2 = new RadioButton(context);

RadiBtn2没有 viewId,generateViewId 在 onChildViewAdd ()中

public void onChildViewAdded(View parent, View child) {
if (parent == RadioGroup.this && child instanceof RadioButton) {
int id = child.getId();
// generates an id if it's missing
if (id == View.NO_ID) {
id = View.generateViewId();
child.setId(id);
}
((RadioButton) child).setOnCheckedChangeWidgetListener(
mChildOnCheckedChangeListener);
}


if (mOnHierarchyChangeListener != null) {
mOnHierarchyChangeListener.onChildViewAdded(parent, child);
}
}

因此,首先是 radiGroup.addView (radiBtn2) ,然后是 radiBtn2.setChecked (true) ;

像这样:

RadioGroup radioGroup = new RadioGroup(context);
RadioButton radioBtn1 = new RadioButton(context);
RadioButton radioBtn2 = new RadioButton(context);
RadioButton radioBtn3 = new RadioButton(context);


radioBtn1.setText("Less");
radioBtn2.setText("Normal");
radioBtn3.setText("More");


radioGroup.addView(radioBtn1);
radioGroup.addView(radioBtn2);
radioGroup.addView(radioBtn3);


radioBtn2.setChecked(true);

在 activity.xml 中添加 android:checked = "true"