如何在radiogroup中将选中的单选按钮设置为默认值?
Posted
技术标签:
【中文标题】如何在radiogroup中将选中的单选按钮设置为默认值?【英文标题】:How to set radio button checked as default in radiogroup? 【发布时间】:2012-02-28 20:15:46 【问题描述】:我已经动态创建了RadioGroup
和RadioButton
,如下所示:
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
始终被选中。这意味着我不能通过选中其他两个单选按钮(radioBtn1
,radioBtn3
)来取消选中radioBtn2
。我想让RadioGroup
一次只能检查一个单选按钮(现在它可以一次检查两个单选按钮)。
我该如何解决这个问题?
【问题讨论】:
有没有动态的需要??? 【参考方案1】:你应该像这样检查 radiogroup 中的单选按钮:
radiogroup.check(IdOfYourButton)
当然,您首先必须为您的单选按钮设置一个 ID
编辑:我忘了,radioButton.getId()
也可以,谢谢 Ramesh
编辑2:
android:checkedButton="@+id/my_radiobtn"
在无线电组 xml 中工作
【讨论】:
或者如果你不想识别你的RadioButton
并且你知道你可以使用的索引((RadioButton)radioGroup.getChildAt(INDEX)).setChecked(true);
你不应该那样做。这将导致此问题中描述的“setChecked”问题。当然,有一些方法可以在没有按钮 ID 的情况下做到这一点,但请不要使用 setChecked()
一种方法是 radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())
或类似的东西
最好不要忘记将单选按钮添加到单选按钮组之前调用 group.check(button.getId())
我必须这样做:radioGroup.Check(radioGroup.GetChildAt(0).Id);
对于 Xamarin.Android 用户【参考方案2】:
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());
【讨论】:
【参考方案3】:我同事的代码也有同样的问题。这听起来是因为您的单选按钮未正确设置您的单选组。这就是您可以多选单选按钮的原因。我尝试了很多东西,最后我做了一个实际上是错误的技巧,但效果很好。
for ( int i = 0 ; i < myCount ; i++ )
if ( i != k )
System.out.println ( "i = " + i );
radio1[i].setChecked(false);
在这里我设置了一个 for 循环,它检查可用的单选按钮并取消选择除新单击的单选按钮之外的所有单选按钮。试试看。
【讨论】:
【参考方案4】: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);
【讨论】:
重要的是在所有单选按钮都添加到单选组之后使用setChecked()
。那么,radioGroup.check(radioBtn2.getId())
就不需要了【参考方案5】:
对于 xml 属性,它的 android:checkedButton
需要检查 RadioButton
的 id
。
<RadioGroup
...
...
android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
... >....</RadioGroup>
【讨论】:
【参考方案6】:在 XML 文件中,设置 RadioGroup
中的 android:checkedButton
字段,并使用默认 RadioButton
的 id:
<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>
【讨论】:
【参考方案7】:这是 RadioGroup 的错误
RadioButton radioBtn2 = new RadioButton(context);
没有viewId的radioBtn2,generateViewId在onChildViewAdded()
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);
所以,首先是radioGroup.addView(radioBtn2),然后是radioBtn2.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);
【讨论】:
【参考方案8】:在你的activity.xml中添加android:checked = "true"
【讨论】:
以上是关于如何在radiogroup中将选中的单选按钮设置为默认值?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查单选按钮是不是在 Android 的单选组中被选中?