Pregunta

Estoy creando pantalla de acceso con 2 editTexts: etUsername y etPassword.

En el etUsername, el usuario debe introducir el nombre de usuario y pulse Intro para ir a la edición de texto etPassword, luego se introduce la contraseña, pulse Intro para iniciar sesión. Aquí está mi código actual:

  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;
   }
  });

Pero cuando introduzca el nombre de usuario, y luego presione intro -. Los intentos de programa para iniciar sesión en el servidor

En el modo de depuración, vi que cuando apreté Introduzca una vez (en la etUsername), entonces en primer lugar: etUsername.onKey () se llama y luego también se llama etPassword.onKey ()!

¿Cómo puedo modificar el código para que el ENTER evento sólo se procesa una vez para el campo actual?

¿Fue útil?

Solución

Antes de comprobar qué tecla se presiona, trate de añadir un cheque para el que se produce acontecimiento clave. Yo supongo que los primeros desencadenantes en el evento de tecla, entonces mover el foco al segundo campo de texto, y aquí también factores desencadenantes en el evento clave en marcha.

Vea aquí para ver un ejemplo sobre cómo comprobar tanto el tipo de evento y la clave: uso tecla "ENTER" en lugar del botón softkeyboard clic

No estoy 100% seguro de esto, pero vale la pena intentarlo: -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top