3 votes

Gérer les edittexts onKeyListener ?

Je crée un écran de connexion avec 2 editTexts : etUsername et etPassword.

Dans le champ etUsername, l'utilisateur doit saisir son nom d'utilisateur et appuyer sur Enter pour accéder au texte d'édition etPassword, puis il saisit son mot de passe et appuie sur Enter pour se connecter. Voici mon code actuel :

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

Mais lorsque je saisis le nom d'utilisateur et que j'appuie sur la touche Entrée, le programme tente de se connecter au serveur.

Dans le mode de débogage, j'ai vu que lorsque j'appuyais sur Enter une fois (sur le etUsername) alors d'abord : etUsername.onKey() est appelé et ensuite etPassword.onKey() est aussi appelé !

Comment puis-je modifier le code pour que l'événement ENTER ne soit traité qu'une seule fois pour le champ en cours ?

4voto

Nailuj Points 7283

Avant de vérifier quelle touche est enfoncée, essayez d'ajouter une vérification de l'événement de touche qui se produit. Je suppose qu'il se déclenche d'abord sur l'événement "touche vers le bas", puis que vous déplacez le curseur vers le deuxième champ de texte et que, là aussi, il se déclenche sur l'événement "touche vers le haut".

Voir ici un exemple de vérification du type d'événement et de la clé : Utiliser la touche "ENTER" du clavier au lieu de cliquer sur le bouton

Je n'en suis pas sûr à 100 %, mais cela vaut la peine d'essayer :-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X