2010-09-27 136 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; 
     }; 

誰能告訴我爲什麼它擊中兩次,當我按下ENTER?

+15

一旦下來,一旦上漲?試試onKeyDown()或onKeyUp(),或者檢查KeyEvent.getAction()。 – benvd 2010-09-27 10:22:25

回答

161

安其被激發兩次:第一次按下按鍵,併爲關鍵了第二次,所以你必須過濾:

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'而不是'this',這該死的字謎。 – 2011-04-04 13:12:12

+2

返回true或false對超類有什麼意義? – OrhanC1 2012-02-10 11:54:34

+5

您應該對未處理的密鑰返回false? – yostane 2012-05-02 16:18:02