2010-09-27 3 views
70

J'utilise ce code:Pourquoi onKey() est appelé deux fois?

public boolean onKey(View v, int keyCode, KeyEvent event) { 
msg = (EditText)findViewById(R.id.msg); 
String message = msg.getText().toString(); 
      if(keyCode == 66) 
      { 
       //It's hitting here twice.   
      } 
      return false; 
     }; 

Quelqu'un peut-il s'il vous plaît me dire pourquoi il est frappé deux fois quand j'appuyez sur Entrée?

+15

Une fois en bas, une fois en place? Essayez onKeyDown() ou onKeyUp() ou vérifiez KeyEvent.getAction(). – benvd

Répondre

161

OnKey est tiré à deux reprises: la première fois pour la clé vers le bas, et la deuxième fois pour la clé, donc vous devez filtrer:

YOUR_VIEW.setOnKeyListener(new OnKeyListener() 
     {       
      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 

       //This is the filter 
       if (event.getAction()!=KeyEvent.ACTION_DOWN) 
        return true; 

       switch (keyCode) { 
       case KeyEvent.KEYCODE_1 : 
        MakeToast(1); 
        break; 
       case KeyEvent.KEYCODE_2 : 
        MakeToast(2); 
        break; 
       case KeyEvent.KEYCODE_3 : 
        MakeToast(3); 
        break; 

       } 

       return true; 
      } 

     }); 
+0

Merci pour cela, j'avais 5 minutes stupides. Je tapais aussi 'sh * t' au lieu de 'this', dieu sacré anagrammes. –

+2

Est-ce que le fait de retourner la valeur true ou false a un sens pour les super classes? – OrhanC1

+5

Vous devez retourner false sur les clés qui ne sont pas traitées? – yostane

Questions connexes