2010-09-27 2 views
70

Я использую этот код:Почему onKey() называется дважды?

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

Может кто-нибудь пожалуйста, скажите мне, почему он дважды бил, когда я нажимаю войти?

+15

Однажды вниз, один раз вверх? Попробуйте onKeyDown() или onKeyUp() или проверьте KeyEvent.getAction(). – benvd

ответ

161

OnKey обжигают дважды: первый раз для ключа вниз, и второй раз для ключа вверх, так что вы должны фильтровать:

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

Спасибо за это, у меня было глупо 5 минут. Я также печатал «sh * t» вместо «этого», черт возьми, анаграммы. –

+2

Верно ли истинное или ложное значение имеет смысл для суперклассов? – OrhanC1

+5

Вы должны вернуть false на клавиши, которые не обрабатываются? – yostane

Смежные вопросы