2017-12-09 2 views
-2

ich diesen Code habenvoran gehen nur, wenn (Bedingung)

spinRoullete.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (errors()){ 
      something 
       return;} 
      if (!errors()){ 
       something else} 

Und das ist für Fehler

private boolean errors() { 
    if (Rone.isChecked()) { 
     if (nr1.getText().length() == 0) { 
      nr1.setError(""); 
     } else { 
      nr1.setError(null); 
     } 
    }   if (Rtwo.isChecked()) { 
     if (nr1.getText().length() == 0) { 
      nr1.setError(""); 
     } else { 
      nr1.setError(null); 
     } 
     if (nr2.getText().length() == 0) { 
      nr2.setError(""); 
     } else { 
      nr2.setError(null); 
     } 
    } 

Etwas hier, es ist falsch, und ich weiß nicht, was .. Die texterrors erscheint, und verschwinden, wenn ich die nr1, oder nr2 (editiertexte) vervollständige, aber etwas stimmt nicht mit der zweiten wenn von onClick. Wenn die Fehler verschwinden, möchte ich zu dieser Sekunde weitergehen, wenn (das mit etwas anderem) .. Was soll ich bearbeiten, um dies zu tun?

+0

ist es möglich, dass beide überprüfen 'Rone.isChecked()' und 'RTWO .isChecked() '? – C2486

+0

Nein, das geht nicht. Und wenn Fehler auftreten, können Sie nicht vorwärts gehen. –

+0

Warum brauchst du das zweite 'if' überhaupt? Wenn Sie diese Position in dem Code erreichen, den Sie bereits kennen, gibt es keine Fehler, sonst hätten Sie die 'return' zuvor ausgeführt. – Henry

Antwort

1

Zunächst einmal, kleinere Optimierungs Verbesserung: Sie haben diesen Code (formatiert für eine verbesserte Lesbarkeit, denselben Code):

if (errors()){ 
    something... 
    return; 
} 
if (!errors()){ 
    something else... 
} 

Aber Sie brauchen nicht, dass mindestens ein, da Sie eine return-Anweisung haben:

if(errors()){ 
    something 
    return; 
} 

something else... 

Die Methode wird einmal statt zweimal aufgerufen, wenn kein Fehler vorliegt, damit Sie Probleme vermeiden.

Sie geben jedoch nie einen sichtbaren Wert von errors() zurück. Höchstwahrscheinlich haben Sie return true an der Unterseite, was bedeutet, dass es immer in die erste if-Anweisung geht.

private boolean errors() { 
    boolean i1 = false;//if no errors, return false 
    if (Rone.isChecked()) { 
     if (nr1.getText().length() == 0) { 
      nr1.setError(""); 
      i1 = true;//There is at least one error 
     } else { 
      nr1.setError(null); 
     } 
    }   
    if (Rtwo.isChecked()) { 
     if (nr1.getText().length() == 0) { 
      nr1.setError(""); 
      i1 = true;//there is at least one error 
     } else { 
      nr1.setError(null); 
     } 
     if (nr2.getText().length() == 0) { 
      nr2.setError(""); 
      return true;//This is the last thing that can happen, so just return true. There is at least one error, this one 
     } else { 
      nr2.setError(null); 
      return i1;//there could have been an error earlier, so return i1 
     } 
    } 
    return i1;//and if the last box isn't checked, return i1 here 
} 

Höchstwahrscheinlich haben Sie am unteren Rand des Verfahrens return true: einfach die Methode ändern. Das bedeutet, dass es immer in die erste if-Anweisung geht und zurückkehrt, auch wenn keine Fehler vorliegen.


Und Sie sollten wirklich Konventionen beginnen, in Vertiefung, ist, dass Sie einige der Code geschrieben sehr schwer zu lesen, da dieser

+0

Thx Sie, es funktioniert gut. Ich werde mich an Ihre Antwort erinnern –

+0

Schöne Lösung gegeben @Zoe – InsaneCat

Verwandte Themen