webentwicklung-frage-antwort-db.com.de

RadioGroup: So überprüfen Sie programmgesteuert

Ich erstelle eine RadioGroup aus XML

    <RadioGroup Android:id="@+id/option" 
        Android:layout_width="match_parent"
        Android:orientation="horizontal" 
        Android:checkedButton="@+id/block_scenario_off"
        Android:layout_height="wrap_content">
        <RadioButton 
            Android:layout_width="0dip"
            Android:layout_weight="1" 
            Android:text="@string/option1" 
            Android:layout_height="wrap_content" 
            Android:id="@+id/option1"
            Android:layout_gravity="center|left" 
            Android:onClick="@string/on_click"/>
        <RadioButton 
            Android:layout_width="0dip"
            Android:layout_weight="1" 
            Android:text="@string/option2" 
            Android:onClick="@string/on_click"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center" 
            Android:id="@+id/option2"/>
        <RadioButton 
            Android:layout_width="0dip"
            Android:layout_weight="1" 
            Android:text="@string/option3"
            Android:onClick="@string/on_click" 
            Android:layout_height="wrap_content"
            Android:layout_gravity="center|right" 
            Android:id="@+id/option3" />
    </RadioGroup>

Im Code Java) überprüfe ich programmgesteuert den ersten Code zur Erstellung von Aktivitäten (onCreate ()) wie folgt:

    mOption = (RadioGroup) findViewById(R.id.option);
    mOption.check(R.id.option1);

Wenn die Aktivität angezeigt wird, ist kein Optionsfeld aktiviert. Irgendeine Hilfe?

44
Bao Le

In Ihrem Layout können Sie Android:checked="true" Zu CheckBox hinzufügen, das Sie auswählen möchten.

Oder Sie können programmgesteuert die in der überprüfbaren Schnittstelle definierte Methode setChecked verwenden:

RadioButton b = (RadioButton) findViewById(R.id.option1); b.setChecked(true);

62
Blackbelt

versuchen Sie dies, wenn Sie möchten, dass Ihr Optionsfeld basierend auf dem Wert einer Variablen, z. "genderStr", dann können Sie folgenden Codeausschnitt verwenden

    if(genderStr.equals("Male"))
       genderRG.check(R.id.maleRB);
    else 
       genderRG.check(R.id.femaleRB);
32

Möglicherweise müssen Sie die Optionsfelder in der onCreate-Methode Ihres Codes deklarieren und verwenden.

RadioButton rb1 = (RadioButton) findViewById(R.id.option1);
rb1.setChecked(true);
25
vik

Achtung! Wenn Sie den Radiobutton mit setChecked() überprüfen, ändert sich der Status innerhalb der RadioGroup nicht. Diese Methode aus der radioGroup gibt beispielsweise ein falsches Ergebnis zurück: getCheckedRadioButtonId().

Überprüfen Sie die Funkgruppe immer mit

mOption.check(R.id.option1);

du wurdest gewarnt ;)

18
AndrewBloom

Nehmen Sie die Radiogruppe und schauen Sie die Kinder an, um festzustellen, ob sie deaktiviert sind.

RadioGroup rg = (RadioGroup) view;
int checked = savedInstanceState.getInt(wrap.getAttributeName());

if(checked != -1) {
    RadioButton btn = (RadioButton) rg.getChildAt(checked);
    btn.toggle();
}
13
Mateusz Mazur

Sie können auch die Methode getChildAt () verwenden. So was:

mOption = (RadioGroup) findViewById(R.id.option);
((RadioButton)mOption.getChildAt(0)).setChecked(true);
12
Levor

Ich benutze diesen Code, wenn ich mit Indizes für die Radiogruppe arbeite:

radioGroup.check(radioGroup.getChildAt(index).getId());
9
Seref Bulbul

es funktioniert, wenn Sie Ihre mOption.check(R.id.option1); in die onAttachedToWindow -Methode einfügen oder folgendermaßen vorgehen:

view.post(new Runnable()
{
    public void run() 
    {
        // TODO Auto-generated method stub
        mOption.check(R.id.option1); 
    }
});

der Grund kann sein, dass die Prüfmethode nur funktioniert, wenn die Funkgruppe tatsächlich gerendert wird.

8
david

Ich benutze diesen Code, während ich mit getId () für die Radiogruppe arbeite:

radiogroup.check(radiogroup.getChildAt(0).getId());

stellen Sie die Position gemäß Ihrem Entwurf von RadioGroup ein

hoffe das wird dir helfen!