web-dev-qa-db-ja.com

ラジオグループでデフォルトとしてチェックされているラジオボタンを設定するにはどうすればよいですか?

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がチェックされます。つまり、他の2つのラジオボタン(radioBtn2radioBtn1)をチェックしてradioBtn3のチェックを外すことはできません。 RadioGroupが一度に1つのラジオボタンしかチェックできないようにしたい(今では、一度に2つのラジオボタンをチェックできる)。

この問題を解決するにはどうすればよいですか?

121
Sandy

次のようなラジオグループのラジオボタンをチェックする必要があります。

radiogroup.check(IdOfYourButton)

もちろん、まずラジオボタンにIDを設定する必要があります

編集:私は忘れてしまった、radioButton.getId()も機能します、thx Ramesh

EDIT2:

Android:checkedButton="@+id/my_radiobtn"

radiogroup xmlで動作します

197
Sprigg

Xml属性の場合、チェックされるidRadioButtonを取るAndroid:checkedButton

<RadioGroup
...
...
Android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
... >....</RadioGroup>
109
IronBlossom

XMLファイルで、RadioGroupAndroid: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>
50
Sara
    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());
19
Ramesh Solanki
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);
6
Anuj Oscar

私の同僚のコードにも同じ問題がありました。これは、ラジオグループがラジオボタンで適切に設定されていないために聞こえます。これが、ラジオボタンを複数選択できる理由です。私は多くのことを試しましたが、最終的には実際には間違っているトリックをしましたが、うまくいきます。

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

ここでforループを設定します。これは、使用可能なラジオボタンをチェックし、新しくクリックされたボタン以外のすべてのボタンを選択解除します。それを試してみてください。

3
Lucifer

Activity.xmlにAndroid:checked = "true"を追加します

2
Leotrim Vojvoda

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);
0
qinmiao