2016-08-04 21 views
0

Ich habe die folgende ValidierungEditText Validierung läuft nur einmal

private boolean validatePin() { 

    String pin = pinTxt.getText().toString().trim(); 

    if (TextUtils.isEmpty(pin) || pin.length() != 4) { 
     pin_layout.setError(mContext.getString(R.string.err_msg_pin)); 
     requestFocus(pinTxt); 
     return false; 
    } else { 
     pin_layout.setErrorEnabled(false); 
    } 
    return true; 
} 

Und ich bin es auf afterTextChanged wie dieser Aufruf:

public void afterTextChanged(Editable editable) { 
     switch (view.getId()) { 
      case R.id.pinTxt: 
       validatePin(); 
       break; 
     } 
    } 

Was ich damit erhalten wird, dass der Fehlertext zeigt die das erste Mal fange ich an, weniger als 4 Zeichen im editText einzugeben, aber wenn ich alles lösche und wieder tippe, bekomme ich keine Fehlermeldung. Irgendwelche Ideen, wie diese Fehlermeldung jedes Mal angezeigt wird, wenn ich anfange, den editText und nicht nur das erste Mal einzugeben?

+0

setErrorEnabled (true)? –

+0

Was ist dein 'pin_layout'? Kannst du das bitte erklären? – himanshu1496

+0

@TimCastelijns Ich setze es auf wahr in der wenn - nicht funktioniert. Dann habe ich versucht, es in anderen zu setzen, aber es zeigte die Fehlermeldung jedes Mal wenn ich etwas eintippte (wie es sollte, wenn es ständig wahr ist). –

Antwort

0

Code ändern zu:

pinTxt.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     validatePin(); 
    } 
}); 

Und

private boolean validatePin() { 

String pin = pinTxt.getText().toString().trim(); 

if (TextUtils.isEmpty(pin) || pin.length() != 4) { 
    pin_layout.setError(mContext.getString(R.string.err_msg_pin)); 
    requestFocus(pinTxt); 
    return false; 
} else { 
    pin_layout.setError(null); 
} 
return true; 
} 

Also hier ist mir Einstellung Fehler an die textInputLayout, die den Eingang zum Stift nehmen und Setzen des Fehlers null, wenn die Fehlerbedingung nicht erfüllt ist, was den Fehler verbergen wird.

+0

Das hat funktioniert. Vielen Dank! –

+0

Cool! fröhliche Codierung !! : D – himanshu1496

0

versuchen, dies in Ihrer bearbeiten Textansicht in xml

android:inputType="textNoSuggestions" 
+0

Vielen Dank für Ihre Antwort, aber das Festlegen dieser Eigenschaft in der XML hat nichts geändert. –

-1
pinTxt.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      validatePin(); 
     } 
    }); 

dies versuchen, addTextChange Zuhörer EditText. setzen Sie Ihren Validierungscode nun in AfterTextChanged Funktion von TextWatcher

+0

Warum denkst du, dass sein afterTextChanged nicht funktioniert? (es funktioniert übrigens) –

+0

ja es funktioniert. aber wenn Sie TextChangeListener zu EdtiText hinzufügen, dann brauchen Sie es nicht "switch (view.getId())" zu überprüfen. so vereinfachte ich seinen Code für die Verwendung –

+0

Einfach ist subjektiv. Es ist nicht wirklich sinnvoll –