Prüfen ob RadioButton eins von 2 ausgewählt ist

wer112

Top Contributor
Ich versuche mich weiter an das Free Entwickler Register Formular. Habe da mehrere Probleme.

1. Möchte das Erst es absenden, wenn alle Felder ausgefüllt ist. Leider wird der Toast trotzdem angezeigt, als ich auch die If Anweisungen zusammengehangen habe.

2. Da kommt auch die Auswahl, ob es privat man als Entwickler seine Apps veröffentlicht(Gibt Nachteile) oder als Unternehmen. Da habe ich 2 RadiButtons.
Leider wird es Rot makiert, wenn man auch was ausgewählt hat.

Wie kann ich machen, dass wenn was Ausgewählt ist, das nicht mehr Rot makiert ist? Bei den anderen Formularen Texte geht es, sobald die Bedinnung stimmt.

RadioButton Code:

Java:
if (!radio_privat.isSelected() && !radio_unternehmen.isSelected()){
            radio_privat.setError("Bitte auswählen");
            radio_unternehmen.setError("Bitte auswählen");

        }

Ich habe es auch mit radio_privat.isChecked probiert, hatte nicht geholfen.

Und jetzt der ganze Code:

Java:
     privat_name = privat_name_edit.getText().toString().trim();
        privat_vorname = privat_vorname_edit.getText().toString().trim();
        privat_geburtstag = privat_geburtstag_edit.getText().toString().trim();
        privat_geburtsort = privat_geburtsort_edit.getText().toString().trim();
        privat_straße = privat_straße_edit.getText().toString().trim();
        privat_hausnummer  = privat_hausnummer_edit.getText().toString().trim();
        privat_postleitzahl = privat_postleitzahl_edit.getText().toString().trim();
        privat_ort = privat_ort_edit.getText().toString().trim();



        if (privat_name.isEmpty()){
            privat_name_edit.setError("Name ist leer");
            privat_name_edit.requestFocus();

        }else if (privat_name.length() < 3){
            privat_name_edit.setError("Name ist zu Kurz");
            privat_name_edit.requestFocus();

        }else if (privat_vorname.isEmpty()){
            privat_vorname_edit.setError("Vorname ist leer");
            privat_vorname_edit.requestFocus();

        }else if (privat_vorname.length() < 3){
            privat_vorname_edit.setError("Vorname ist zu Kurz");
            privat_vorname_edit.requestFocus();

        }else if (privat_geburtstag.isEmpty()){
            privat_geburtstag_edit.setError("Gebutstag ist leer");
            privat_geburtstag_edit.requestFocus();

        }else if (privat_geburtstag.length() < 10){
            privat_geburtstag_edit.setError("Geburtstag ist zu kurz.\n\nRichtiges Format: 01.01.1001");
            privat_geburtstag_edit.requestFocus();

            //Filter auf Buchstaben prüfen. Nur Zahlen erlauben

        } else if (privat_geburtsort.isEmpty()){
            privat_geburtsort_edit.setError("Gebutsort ist leer");
            privat_geburtsort_edit.requestFocus();

        }else if (privat_geburtsort.length() < 4){
            privat_geburtsort_edit.setError("Geburtsort ist zu kurz.");
            privat_geburtsort_edit.requestFocus();

        }else if (privat_straße.isEmpty()){
            privat_straße_edit.setError("Straße ist leer");
            privat_straße_edit.requestFocus();

        }else if (privat_straße.length() < 7){
            privat_straße_edit.setError("Straße ist zu kurz.");
            privat_straße_edit.requestFocus();
        }else if (privat_hausnummer.isEmpty()){
            privat_hausnummer_edit.setError("Hausnummer ist leer");
            privat_hausnummer_edit.requestFocus();

        }else if (privat_postleitzahl.isEmpty()){
            privat_postleitzahl_edit.setError("Postleitzahl ist leer");
            privat_postleitzahl_edit.requestFocus();

        }else if (privat_postleitzahl.length() < 5){
            privat_postleitzahl_edit.setError("Postleitzahl ist zu kurz.");
            privat_postleitzahl_edit.requestFocus();

        }else if (privat_ort.isEmpty()){
            privat_ort_edit.setError("Stadt/Ort ist leer");
            privat_ort_edit.requestFocus();

        }else if (privat_ort.length() < 4){
            privat_ort_edit.setError("Stadt/Ort ist zu kurz.");
            privat_ort_edit.requestFocus();

        }else if (!radio_privat.isSelected() && !radio_unternehmen.isSelected()){
            radio_privat.setError("Bitte auswählen");
            radio_unternehmen.setError("Bitte auswählen");

        }

        Toast.makeText(getActivity(), "Alles geschafft.", Toast.LENGTH_SHORT).show();

Nicht wundern, die Formular Filter gibt es nicht, weil ich es nicht hinbekomme...

Könnt ihr das Problem von den Radiobuttons lösen? Und ggf. das mit dem Absenden?(Habe die if Anweisung eigentlich per Gruppe gehabt.)

Ich danke mich an alle erfahrenen Java Entwickler im Vorraus.
 

KonradN

Super-Moderator
Mitarbeiter
Du führst den Toast ja auch immer aus. Er macht den if / else if Gerumpel und ggf. irgendwelche Dinge daraus und dann - egal was vorher alles war - wird der Toast.makeText Aufruf ausgeführt.

Du musst also die Logik auch so anpassen, dass er da nicht weiter geht, wenn er etwas angemeckert hat.

Generell ist das if / else if Gerüst auch sehr schlecht. Wenn ich mehrere Felder nicht ausgefüllt habe, dann sollte er doch alle fehlenden Eingaben anmeckern. Als Anwender wäre ich sauer, wer so nach und nach immer neue Dinge anfordern würde.

Was Du also machen könntest, wäre alles zu reinen if Statements umzuwandeln.
Und dann hast Du eine lokale Variable, in der Du dir merkst, ob das Formular korrekt ausgefüllt wurde ... also etwas in der Art:

Java:
boolean correctFilledOut = true;
if (....) {
    ....
    correctFilledOut = false;
}
if (....) {
    ....
    correctFilledOut = false;
}
...

if (correctFilledOut) {
    Toast.makeText(....);
}
 

wer112

Top Contributor
Du führst den Toast ja auch immer aus. Er macht den if / else if Gerumpel und ggf. irgendwelche Dinge daraus und dann - egal was vorher alles war - wird der Toast.makeText Aufruf ausgeführt.

Du musst also die Logik auch so anpassen, dass er da nicht weiter geht, wenn er etwas angemeckert hat.

Generell ist das if / else if Gerüst auch sehr schlecht. Wenn ich mehrere Felder nicht ausgefüllt habe, dann sollte er doch alle fehlenden Eingaben anmeckern. Als Anwender wäre ich sauer, wer so nach und nach immer neue Dinge anfordern würde.
Pflichtangaben müssen angemeckert werden. Würde von Oben nach unten prüfen und dann auch sagen, was das Problem ist. Damit er auch weiß der Nutzer, wo er ein Fehler noch hatte.
Was Du also machen könntest, wäre alles zu reinen if Statements umzuwandeln.
Also Paar Weise findest du nicht gut. Also alles in ein if alleine machen.
Und dann hast Du eine lokale Variable, in der Du dir merkst, ob das Formular korrekt ausgefüllt wurde ... also etwas in der Art:

Java:
boolean correctFilledOut = true;
[/QUOTE]
Und muss ich dann noch ein else machen, wenn er das ausgefüllt hat, dass er wieder auf true setzt? Damit bei der nächsten Eingabe wieder false setzten kann?
[QUOTE="KonradN, post: 1359038, member: 70879"]
if (....) {
    ....
    correctFilledOut = false;
}
if (....) {
    ....
    correctFilledOut = false;
}
...

if (correctFilledOut) {
    Toast.makeText(....);
}

Was ist das Problem mit den RadioButtons bzw. CheckBox, warum kann ich da kein ! vor. isChecked machen? Also man soll ja eins von beiden auswählen. Sobald man das gemacht hat, kann man das "anmeckern" ist ja wieder weg.
 

KonradN

Super-Moderator
Mitarbeiter
Ich verstehe gerade das Problem nicht. Ist das Problem, dass ein einmal angemeckertes Feld sozusagen angemeckert bleibt?
Ich habe sowas bisher nicht benötigt, aber was Du evtl. suchst ist:
Java:
if (.....) {
    someControl.setError("some error message");
} else {
    someControl.setError(null);
}

Das ist dann wohl auch etwas, das man vermutlich in eine Methode packen kann. Einfach mal schauen, in welcher basisklasse setError implementiert wurde und dann hast Du eine Methode mit einer Signatur wie
checkInput(BasisKlasse, BooleanProvider, String)

Und dann hat man nur noch etwas wie
checkInput(private_name, () -> privat_name.length() < 3, "Name ist zu kurz");
 

wer112

Top Contributor
Ich verstehe gerade das Problem nicht. Ist das Problem, dass ein einmal angemeckertes Feld sozusagen angemeckert bleibt?
Ich habe sowas bisher nicht benötigt, aber was Du evtl. suchst ist:
Es geht um die zwei Radio Buttons: https://drive.google.com/file/d/1oy7sNbV6hJQ2ydhgjvdYTl8r9OP6e48I/view?usp=sharing

Wenn keins der beiden ausgewählt ist, soll dieses Error kommen, sonst nicht.
Habe das durch dein Kommentar es so gemacht:
Java:
if (!radio_privat.isSelected() && !radio_unternehmen.isSelected()){
            radio_privat.setError("Bitte auswählen");
            radio_privat.requestFocus();
            radio_unternehmen.setError("Bitte auswählen");
            radio_unternehmen.requestFocus();

            correctFilledOut = false;

        }else{
            radio_privat.setError(null);
            radio_unternehmen.setError(null);
            
        }

Leider wird es trotzdem Rot markiert, wenn ich auf den Button drücke:

Habe es auch als ist gegeben, klappt auch nicht:
Java:
 if (!radio_privat.isSelected() && !radio_unternehmen.isSelected()){
            radio_privat.setError("Bitte auswählen");
            radio_privat.requestFocus();
            radio_unternehmen.setError("Bitte auswählen");
            radio_unternehmen.requestFocus();

            correctFilledOut = false;

        }else if(radio_privat.isChecked() || radio_unternehmen.isChecked()){
            radio_privat.setError(null);
            radio_unternehmen.setError(null);

        }

Java:
if (.....) {
    someControl.setError("some error message");
} else {
    someControl.setError(null);
}
Gemacht, siehe oben
Das ist dann wohl auch etwas, das man vermutlich in eine Methode packen kann. Einfach mal schauen, in welcher basisklasse setError implementiert wurde und dann hast Du eine Methode mit einer Signatur wie
checkInput(BasisKlasse, BooleanProvider, String)

Und dann hat man nur noch etwas wie
checkInput(private_name, () -> privat_name.length() < 3, "Name ist zu kurz");
Das ist grade zu hoch. Werde es mal näher anschauen müssen.

Wenn ich die RadioButtons außer Acht lasse(so) dann klappt es mit dem Toast.
Java:
        boolean correctFilledOut = true;

        privat_name = privat_name_edit.getText().toString().trim();
        privat_vorname = privat_vorname_edit.getText().toString().trim();
        privat_geburtstag = privat_geburtstag_edit.getText().toString().trim();
        privat_geburtsort = privat_geburtsort_edit.getText().toString().trim();
        privat_straße = privat_straße_edit.getText().toString().trim();
        privat_hausnummer  = privat_hausnummer_edit.getText().toString().trim();
        privat_postleitzahl = privat_postleitzahl_edit.getText().toString().trim();
        privat_ort = privat_ort_edit.getText().toString().trim();



        if (privat_name.isEmpty()){
            privat_name_edit.setError("Name ist leer");
            privat_name_edit.requestFocus();

            correctFilledOut = false;
        }

        if (privat_name.length() < 3){
            privat_name_edit.setError("Name ist zu Kurz");
            privat_name_edit.requestFocus();

        }

        if (privat_vorname.isEmpty()){
            privat_vorname_edit.setError("Vorname ist leer");
            privat_vorname_edit.requestFocus();
            correctFilledOut = false;

        }

        if (privat_vorname.length() < 3){
            privat_vorname_edit.setError("Vorname ist zu Kurz");
            privat_vorname_edit.requestFocus();

            correctFilledOut = false;

        }

        if (privat_geburtstag.isEmpty()){
            privat_geburtstag_edit.setError("Gebutstag ist leer");
            privat_geburtstag_edit.requestFocus();

            correctFilledOut = false;

        }

        if (privat_geburtstag.length() < 10){
            privat_geburtstag_edit.setError("Geburtstag ist zu kurz.\n\nRichtiges Format: 01.01.1001");
            privat_geburtstag_edit.requestFocus();

            correctFilledOut = false;

            //Filter auf Buchstaben prüfen. Nur Zahlen erlauben

        }

        if (privat_geburtsort.isEmpty()){
            privat_geburtsort_edit.setError("Gebutsort ist leer");
            privat_geburtsort_edit.requestFocus();

            correctFilledOut = false;

        }

        if (privat_geburtsort.length() < 4){
            privat_geburtsort_edit.setError("Geburtsort ist zu kurz.");
            privat_geburtsort_edit.requestFocus();

            correctFilledOut = false;

        }

        if (privat_straße.isEmpty()){
            privat_straße_edit.setError("Straße ist leer");
            privat_straße_edit.requestFocus();

            correctFilledOut = false;

        }

        if (privat_straße.length() < 7){
            privat_straße_edit.setError("Straße ist zu kurz.");
            privat_straße_edit.requestFocus();

            correctFilledOut = false;

        }

        if (privat_hausnummer.isEmpty()){
            privat_hausnummer_edit.setError("Hausnummer ist leer");
            privat_hausnummer_edit.requestFocus();

            correctFilledOut = false;

        }

        if (privat_postleitzahl.isEmpty()){
            privat_postleitzahl_edit.setError("Postleitzahl ist leer");
            privat_postleitzahl_edit.requestFocus();

            correctFilledOut = false;

        }

        if (privat_postleitzahl.length() < 5){
            privat_postleitzahl_edit.setError("Postleitzahl ist zu kurz.");
            privat_postleitzahl_edit.requestFocus();

            correctFilledOut = false;

        }

        if (privat_ort.isEmpty()){
            privat_ort_edit.setError("Stadt/Ort ist leer");
            privat_ort_edit.requestFocus();

            
            correctFilledOut = false;

        }

        if (privat_ort.length() < 4){
            privat_ort_edit.setError("Stadt/Ort ist zu kurz.");
            privat_ort_edit.requestFocus();

            correctFilledOut = false;

        }

        /*


        if (!radio_privat.isSelected() && !radio_unternehmen.isSelected()){
            radio_privat.setError("Bitte auswählen");
            radio_privat.requestFocus();
            radio_unternehmen.setError("Bitte auswählen");
            radio_unternehmen.requestFocus();

            correctFilledOut = false;

        }else if(radio_privat.isChecked() || radio_unternehmen.isChecked()){
            radio_privat.setError(null);
            radio_unternehmen.setError(null);

        }

        if(!agb.isChecked()){
            agb.setError("Aktzeptieren Sie die Allgemeine Geschäftsbedingungen.");
            agb.requestFocus();

            correctFilledOut = false;
        }




        if(radio_unternehmen.isChecked()){



        }
        
         */


Nur das es anstatt erst leer anzeigt, zu kurz anzeigt, deswegen war das mit den Paaren gut...
 

Neue Themen


Oben