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
がチェックされます。つまり、他の2つのラジオボタン(radioBtn2
、radioBtn1
)をチェックしてradioBtn3
のチェックを外すことはできません。 RadioGroup
が一度に1つのラジオボタンしかチェックできないようにしたい(今では、一度に2つのラジオボタンをチェックできる)。
この問題を解決するにはどうすればよいですか?
次のようなラジオグループのラジオボタンをチェックする必要があります。
radiogroup.check(IdOfYourButton)
もちろん、まずラジオボタンにIDを設定する必要があります
編集:私は忘れてしまった、radioButton.getId()
も機能します、thx Ramesh
EDIT2:
Android:checkedButton="@+id/my_radiobtn"
radiogroup xmlで動作します
Xml属性の場合、チェックされるid
のRadioButton
を取るAndroid:checkedButton
。
<RadioGroup
...
...
Android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
... >....</RadioGroup>
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>
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());
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);
私の同僚のコードにも同じ問題がありました。これは、ラジオグループがラジオボタンで適切に設定されていないために聞こえます。これが、ラジオボタンを複数選択できる理由です。私は多くのことを試しましたが、最終的には実際には間違っているトリックをしましたが、うまくいきます。
for ( int i = 0 ; i < myCount ; i++ )
{
if ( i != k )
{
System.out.println ( "i = " + i );
radio1[i].setChecked(false);
}
}
ここでforループを設定します。これは、使用可能なラジオボタンをチェックし、新しくクリックされたボタン以外のすべてのボタンを選択解除します。それを試してみてください。
Activity.xmlにAndroid:checked = "true"
を追加します
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);