Bearbeiten Sie EditTexts OnKeyListener?
-
13-10-2019 - |
Frage
Ich erstelle einen Anmeldebildschirm mit 2 EditTexts: Etusername und Etpassword.
Im Etusername sollte der Benutzer den Benutzernamen eingeben und die Eingabetaste drücken, um zum ETPassword zu bearbeiten. Dann gibt er das Kennwort ein und drücken Sie die Eingabetaste, um sich anzumelden. Hier ist mein aktueller Code:
etUsername.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_ENTER)) {
etPassword.requestFocus();
return true;
} else
return false;
}
});
etPassword.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_ENTER)) {
loginToServer();
return true;
} else
return false;
}
});
Aber wenn ich den Benutzernamen eingehe und dann die Eingabetaste drücke - versucht das Programm, sich beim Server anzumelden.
Im Debug -Modus habe ich das gesehen, als ich die Eingabetaste drückte einmal (Auf dem Etusername) Dann zuerst: Etusername.onkey () wird aufgerufen und dann etpassword.onkey () wird auch genannt!
Wie kann ich den Code so ändern, dass das Eingabereignis nur einmal für das aktuelle Feld verarbeitet wird?
Lösung
Bevor Sie überprüfen, welche Taste gedrückt werden, fügen Sie einen Scheck hinzu, welcher Schlüsselereignis stattfindet. Ich würde vermuten, dass es zuerst das Schlüssel-Down-Ereignis auslöst, dann bewegen Sie sich auf das zweite Textfeld, und hier löst es auch das Schlüssel-Up-Ereignis aus.
Ein Beispiel finden Sie hier, um sowohl den Ereignisart als auch den Schlüssel zu überprüfen: Verwenden Sie die Taste "Eingeben" auf Softkeyboard, anstatt zu klicken, anstatt auf die Schaltfläche zu klicken
Ich bin mir dessen nicht 100% sicher, aber es ist einen Versuch wert :-)