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?

War es hilfreich?

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 :-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top