Wie wird das Optionsfeld in der Radiogruppe als Standard aktiviert?

131

Ich habe erstellt RadioGroupund RadioButtondynamisch , wie folgend:

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

Hier Schritt radioBtn2.setChecked(true);Ursachen radioBtn2immer geprüft. Das heißt, ich kann das radioBtn2Kontrollkästchen nicht deaktivieren, indem ich die beiden anderen Optionsfelder ( radioBtn1, radioBtn3) aktiviere . Ich möchte, dass RadioGroupnur ein Optionsfeld gleichzeitig überprüft werden kann (jetzt können zwei Radiobutton gleichzeitig überprüft werden).

Wie kann ich dieses Problem lösen?

Sandig
quelle
brauchst du da dynamisch ???
Vk Hooda

Antworten:

216

Sie sollten den Radiobutton in der Radiogruppe folgendermaßen überprüfen:

radiogroup.check(IdOfYourButton)

Natürlich müssen Sie zuerst eine ID für Ihre Radiobuttons festlegen

EDIT: Ich habe vergessen, radioButton.getId()funktioniert auch, danke Ramesh

EDIT2:

android:checkedButton="@+id/my_radiobtn"

funktioniert in Radiogruppe XML

Sprigg
quelle
39
oder wenn Sie Ihren nicht identifizieren möchten RadioButtonund den Index kennen, den Sie verwenden können ((RadioButton) radioGroup.getChildAt (INDEX)). setChecked (true);
Ahmad Kayyali
17
Das solltest du nicht tun. Dies führt zu dem in dieser Frage beschriebenen Problem "setChecked". Natürlich gibt es Möglichkeiten, dies ohne IDs Ihrer Schaltflächen zu tun, aber bitte nicht mit setChecked() One Way wäre radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId())oder so ähnlich
Sprigg
1
Gut, nicht zu vergessen, das Optionsfeld zur Optionsfeldgruppe hinzuzufügen, bevor Sie group.check (button.getId ()) aufrufen
Tom
1
Ich musste es so machen: radioGroup.Check(radioGroup.GetChildAt(0).Id);für Xamarin.Android-Benutzer
Mario Galván
112

Im Fall für seine XML - Attribut , android:checkedButtondas des Takes idvon dem RadioButtonüberprüft werden.

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

Legen Sie in der XML-Datei das android:checkedButtonFeld in Ihrem RadioGroupmit der ID Ihres Standardwerts fest 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>
Sara
quelle
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());
Ramesh Solanki
quelle
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);
Anuj Oscar
quelle
Wichtig ist die Verwendung, setChecked()nachdem alle Optionsfelder zur Optionsgruppe hinzugefügt wurden. Dann radioGroup.check(radioBtn2.getId())ist das nicht nötig
Hartmut Pfitzinger
3

Es gab das gleiche Problem im Code meines Kollegen. Dies klingt so, als ob Ihre Radiogruppe mit Ihren Optionsfeldern nicht richtig eingestellt ist. Aus diesem Grund können Sie die Optionsfelder mehrfach auswählen. Ich habe viele Dinge ausprobiert, schließlich habe ich einen Trick gemacht, der eigentlich falsch ist, aber gut funktioniert.

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

Hier setze ich eine for-Schleife, die nach den verfügbaren Optionsfeldern sucht und alle außer dem neu angeklickten abwählt. Versuch es.

Luzifer
quelle
1

Fügen Sie android:checked = "true"in Ihrer activity.xml hinzu

Leotrim Vojvoda
quelle
0

Es ist ein Fehler von RadioGroup

RadioButton radioBtn2 = new RadioButton(context);

radioBtn2 ohne viewId und generateViewId befindet sich in 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);
    }
}

also zuerst radioGroup.addView (radioBtn2), dann radioBtn2.setChecked (true);

So was:

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);
Qinmiao
quelle