146

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

どうすればこの問題を解決できますか?

4

8 に答える 8

246

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

radiogroup.check(IdOfYourButton)

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

編集:私は忘れていました、同様にradioButton.getId()動作します、thx Ramesh

EDIT2:

android:checkedButton="@+id/my_radiobtn"

ラジオグループ xml で動作します

于 2012-02-07T11:47:40.467 に答える
117

xml 属性の場合、チェック対象のandroid:checkedButtonを取得します。idRadioButton

<RadioGroup
...
...
android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
... >....</RadioGroup>
于 2013-08-25T09:48:36.887 に答える
57

XML ファイルで、デフォルトの id を使用してのandroid:checkedButtonフィールドを設定します。RadioGroupRadioButton

<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>
于 2014-02-18T01:08:19.043 に答える
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());
于 2012-02-07T11:54:54.793 に答える
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);
于 2012-08-02T05:55:15.550 に答える
3

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

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

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

于 2012-02-07T12:00:10.457 に答える
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);
于 2016-06-29T10:19:54.517 に答える