Wie überprüfe ich, ob ein Radiobutton in einer Radiogruppe in Android aktiviert ist?

75

Ich muss die Validierung festlegen, dass der Benutzer alle Details auf einer Seite ausfüllen / auswählen muss. Wenn alle Felder leer zeigen wollen , sind Toast message to fill.Jetzt brauche ich Set - Validierung für RadioButtonin der RadioGroup.ich diesen Code versucht , aber funktionierte nicht richtig. Schlagen Sie mir den richtigen Weg vor. Danke.

// get selected radio button from radioGroup
int selectedId = gender.getCheckedRadioButtonId();
// find the radiobutton by returned id
selectedRadioButton = (RadioButton)findViewById(selectedId);
// do what you want with radioButtonText (save it to database in your case)
radioButtonText = selectedRadioButton.getText().toString();

if(radioButtonText.matches(""))
{
    Toast.makeText(getApplicationContext(), "Please select Gender", Toast.LENGTH_SHORT).show();
    Log.d("QAOD", "Gender is Null");
}
else
{
    Log.d("QAOD", "Gender is Selected");
}
Srihari
quelle
1
if (radioGroup.getCheckedRadioButtonId () == radioGroup.getChildAt (radio1) .getId ()) {radio 1 ist aktiviert; } else if (..... == radioGroup.getChildAt (radio2)) {radio 2 ist aktiviert; } ... damit können Sie den ausgewählten Funkwert abrufen. :)
Ripal Tamboli
Hallo @RipalTamboli Danke für den Kommentar, aber ich kann den Wert und den Text des Optionsfelds abrufen. Ich muss überprüfen, ob der Benutzer das Geschlecht (Radiogruppe) nicht überprüft. Beim Klicken auf die Schaltfläche wird eine Fehlermeldung angezeigt.
Srihari
1
OK. Können Sie bitte überprüfen, ob getCheckedRadioButtonID () zurückgegeben wird, wenn keine Option ausgewählt ist? Wenn es null / -1 zurückgibt, wird Ihre Arbeit erledigt, indem überprüft wird, ob es null / -1 ist oder nicht. :) nwys in der Geschlechtergruppe, standardmäßig muss immer eine Option ausgewählt werden. Dies ist die Standardmethode zum Entwerfen :) .. Lassen Sie mich wissen, wenn Sie Fragen haben.
Ripal Tamboli

Antworten:

197

Wenn Sie nur eine überprüfen möchten, können RadioButtonSie die isCheckedFunktion verwenden

if(radioButton.isChecked())
{
  // is checked    
}
else
{
  // not checked
}

und wenn Sie eine haben RadioGroup, können Sie verwenden

if (radioGroup.getCheckedRadioButtonId() == -1)
{
  // no radio buttons are checked
}
else
{
  // one of the radio buttons is checked
}
Apoorv
quelle
Sehr hilfreich. Danke für die Antwort.
Pooja
20

Alles was Sie tun müssen, ist Gebrauch getCheckedRadioButtonId()und isChecked()Methode,

if(gender.getCheckedRadioButtonId()==-1)
{
    Toast.makeText(getApplicationContext(), "Please select Gender", Toast.LENGTH_SHORT).show();
}
else
{
    // get selected radio button from radioGroup
    int selectedId = gender.getCheckedRadioButtonId();
    // find the radiobutton by returned id
    selectedRadioButton = (RadioButton)findViewById(selectedId);
    Toast.makeText(getApplicationContext(), selectedRadioButton.getText().toString()+" is selected", Toast.LENGTH_SHORT).show();
}

https://developer.android.com/guide/topics/ui/controls/radiobutton.html

Mehul Joisar
quelle
8

Verwenden Sie die Funktion isChecked () für jeden RadioButton, den Sie überprüfen müssen.

RadioButton maleRadioButton, femaleRadioButton;

maleRadioButton = (RadioButton) findViewById(R.id.maleRadioButton);
femaleRadioButton = (RadioButton) findViewById(R.id.femaleRadioButton);

Verwenden Sie dann das Ergebnis für Ihre if / else-Fallüberlegung.

if (maleRadioButton.isChecked() || femaleRadioButton.isChecked()) {
     Log.d("QAOD", "Gender is Selected");
} else {
    Toast.makeText(getApplicationContext(), "Please select Gender", Toast.LENGTH_SHORT).show();
    Log.d("QAOD", "Gender is Null");
}
Robin Ellerkmann
quelle
Hallo, danke für die Antwort, ich muss nach der gesamten Funkgruppe suchen, nicht nach einem einzigen Optionsfeld.
Srihari
5
  rgrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int i) {
            switch(i) {
                case R.id.type_car:
                    num=1;
                    Toast.makeText(getApplicationContext()," Car",Toast.LENGTH_LONG).show();
                    break;
                case R.id.type_bike:
                    num=2;
                    Toast.makeText(getApplicationContext()," Bike",Toast.LENGTH_LONG).show();
                    break;
            }
        }
    });
Malik Shahbaz
quelle
4

versuche dies zu benutzen

<RadioGroup
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"       
    android:orientation="horizontal"
>    
    <RadioButton
        android:id="@+id/standard_delivery"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Standard_delivery"
        android:checked="true"
        android:layout_marginTop="4dp"
        android:layout_marginLeft="15dp"
        android:textSize="12dp"
        android:onClick="onRadioButtonClicked"   
    />

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Midnight_delivery"
        android:checked="false"
        android:layout_marginRight="15dp"
        android:layout_marginTop="4dp"
        android:textSize="12dp"
        android:onClick="onRadioButtonClicked"
        android:id="@+id/midnight_delivery"
    />    
</RadioGroup>

Das ist Java-Klasse

public void onRadioButtonClicked(View view) {
        // Is the button now checked?
        boolean checked = ((RadioButton) view).isChecked();

        // Check which radio button was clicked
        switch(view.getId()) {
            case R.id.standard_delivery:
                if (checked)
                    Toast.makeText(DishActivity.this," standard delivery",Toast.LENGTH_LONG).show();
                    break;
            case R.id.midnight_delivery:
                if (checked)
                    Toast.makeText(DishActivity.this," midnight delivery",Toast.LENGTH_LONG).show();
                    break;
        }
    }
Gaurav Gupta
quelle
4

Ich habe folgendes verwendet und es hat bei mir funktioniert. Ich habe eine boolesche Validierungsfunktion verwendet, bei der, wenn ein Optionsfeld in einer Radiogruppe aktiviert ist, die Validierungsfunktion true zurückgibt und eine Übermittlung erfolgt. Wenn false zurückgegeben wird, erfolgt keine Übermittlung und es wird ein Toast auf "Geschlecht auswählen" angezeigt:

  1. MainActivity.java

    public class MainActivity extends AppCompatActivity {
        private RadioGroup genderRadioGroup;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        //Initialize Radio Group And Submit Button
        genderRadioGroup=findViewById(R.id.gender_radiogroup);
        AppCompatButton submit = findViewById(R.id.btnSubmit);
    
        //Submit Radio Group using Submit Button
        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Check Gender radio Group For Selected Radio Button
                if(genderRadioGroup.getCheckedRadioButtonId()==-1){//No Radio Button Is Checked
                    Toast.makeText(getApplicationContext(), "Please Select Gender", Toast.LENGTH_LONG).show();
                }else{//Radio Button Is Checked
                    RadioButton selectedRadioButton = findViewById(genderRadioGroup.getCheckedRadioButtonId());
                    gender = selectedRadioButton == null ? "" : selectedRadioButton.getText().toString().trim();
                }
                //Validate
                if (validateInputs()) {
                    //code to proceed when Radio button is checked
                }
            }
        }
        //Validation - No process is initialized if no Radio button is checked
        private boolean validateInputs() {
            if (genderRadioGroup.getCheckedRadioButtonId()==-1) {
                return false;
            }
            return true;
        }
    }
    
  2. In activity_main.xml:

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
    
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/gender"/>
    
        <RadioGroup
                android:id="@+id/gender_radiogroup"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
            <RadioButton
                    android:id="@+id/male"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/male"/>
    
            <RadioButton
                    android:id="@+id/female"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/female""/>
    
        </RadioGroup>
    
        <android.support.v7.widget.AppCompatButton
            android:id="@+id/btnSubmit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/submit"/>
    
    </LinearLayout>
    

Wenn kein Optionsfeld für das Geschlecht ausgewählt ist, wird der Code zum Fortfahren nicht ausgeführt.

Ich hoffe das hilft.

Profjack
quelle
Könnten Sie einige Kommentare dazu hinzufügen, was dies bewirkt und warum es das Problem löst?
Matt C
1
Ich habe dem obigen Beitrag Kommentare hinzugefügt. Ich hoffe, die Kommentare zeigen, was der Code tut und warum er das Problem löst.
Profjack
3

Versuchen Sie, die Methode isChecked () zu verwenden.

Mögen,

selectedRadioButton.isChecked () -> gibt einen Booleschen Wert zurück.

Refere hier für weitere Details zu dem Radioknopf

Balachandarkm
quelle
Vielen Dank für Ihre Antwort. Ich muss nachsehen, ob die gesamte Radiogruppe nicht ein einziges Optionsfeld enthält.
Srihari
1
hier gehts Verwenden Sie die Methode getCheckedRadioButtonId () in Ihrer RadioGroup, um dies herauszufinden. Es gibt -1 zurück, wenn kein RadioButton in der Gruppe ausgewählt ist. Du machst das schon. Wenn selectedId -1 ist, bedeutet dies, dass kein Geschlecht ausgewählt ist. Andernfalls wird etwas in der Gruppe ausgewählt.
Balachandarkm
3

Ich benutzte die ids meines Radiobuttons mit der ID des zu vergleichen , checkedRadioButtondass ich habe mitmRadioGroup.getCheckedRadioButtonId()

Hier ist mein Code:

mRadioButton1=(RadioButton)findViewById(R.id.first);
mRadioButton2=(RadioButton)findViewById(R.id.second);
mRadioButton3=(RadioButton)findViewById(R.id.third);
mRadioButton4=(RadioButton)findViewById(R.id.fourth);

mNextButton=(Button)findViewById(R.id.next_button);

mNextButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int selectedId=mRadioGroup.getCheckedRadioButtonId();

        int n=0;
        if(selectedId==R.id.first){n=1;}

        else if(selectedId==R.id.second){n=2;}

        else if(selectedId==R.id.third){n=3;}

        else if(selectedId==R.id.fourth){n=4;}
        //. . . .
    }
Shubhdeep Singh
quelle
1

Meine Antwort ist gemäß der Dokumentation , die gut funktioniert.

1) In die XML-Datei einschließen android:onClick="onRadioButtonClicked"wie unten gezeigt:

<RadioGroup
android:id="@+id/rg1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center">
<RadioButton
    android:id="@+id/b1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="onCreateOptionsMenu()"
    android:onClick="onRadioButtonClicked"
            />
<RadioButton
    android:id="@+id/b2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="onCreateMenu()"
    android:onClick="onRadioButtonClicked"
            />
</RadioGroup>

2) In einer Java-Datei implementieren Sie eine onRadioButtonClickedMethode außerhalb der onCreate()Methode wie unten gezeigt:

public void onRadioButtonClicked(View view) {
    // Is the button now checked?
    boolean checked = ((RadioButton) view).isChecked();

    // Check which radio button was clicked
    switch(view.getId()) {
        case R.id.b1:
            if (checked)
            {
                Log.e("b1", "b1" );
                break;
            }
        case R.id.b2:
            if (checked)
                break;
    }
}
Shivam Taneja
quelle
0
mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int i) {
            if (mRadioButtonMale.isChecked()) {
                text = "male";
            } else {
                text = "female";
            }
        }
    });

ODER

 mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int i) {
            if (mRadioButtonMale.isChecked()) { text = "male"; }
            if(mRadioButtonFemale.isChecked()) { text = "female"; }
        }
    });
Muhammad Shoaib Murtaza
quelle