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


132

私が作成している 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常にチェックされます。つまり、radioBtn2他の2つのラジオボタン(radioBtn1radioBtn3)をオンにしてもオフにすることはできません。一度にRadioGroup1つのラジオボタンのみをチェックできるようにしたい(今では一度に2つのラジオボタンをチェックできる)。

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


動的に必要ですか?
vk hooda

回答:


217

次のように、radiogroupのラジオボタンを確認する必要があります。

radiogroup.check(IdOfYourButton)

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

編集:私は忘れて、radioButton.getId()うまくいきます、ラメシュ

EDIT2:

android:checkedButton="@+id/my_radiobtn"

radiogroup xmlで動作します


39
または、idを使用せずRadioButton、使用できるインデックスがわかっている場合((RadioButton)radioGroup.getChildAt(INDEX))。setChecked(true);
Ahmad Kayyali 2013

17
あなたはそれをすべきではありません。これにより、この質問で説明されている「setChecked」問題が発生します。もちろん、ボタンのIDなしでそれを行う方法はありますが、使用しないでくださいsetChecked() 。1つの方法radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())またはそのようなもの
Sprigg

1
group.check(button.getId())を呼び出すに、ラジオボタングループラジオボタンを追加することを忘れないでください
tom

1
私は、このようにそれをしなければならなかった:radioGroup.Check(radioGroup.GetChildAt(0).Id);Xamarin.Androidユーザーのために
マリオ・ガルバン

112

XML属性の場合、そのandroid:checkedButton取るidのがRadioButtonチェックされます。

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

50

XMLファイルで、android:checkedButtonフィールドをに設定し、RadioGroupデフォルトの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>

20
    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());

6
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())ありません
Hartmut Pfitzinger '27 / 03/14

3

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

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

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



0

RadioGroupのバグです

RadioButton radioBtn2 = new RadioButton(context);

radioBtn2、viewIdなし、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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.