2011-02-19 45 views
2

可能重複的兩個實例:
public boolean onKey() called twice?機器人:onKeyListener模擬按鍵

Display.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     switch (keyCode) { 
      case KeyEvent.KEYCODE_ENTER: 
       solveExpression(); 
       return true; 
     } 
     return false; 
    } 
}); 

我試圖解決包含在顯示器(的EditText)內的表達,通過按下鍵盤上的輸入按鈕,它總是將它解釋爲我按了兩次按鈕。有誰知道爲什麼發生這種情況?

+0

我不是一個機器人的傢伙,但代碼對我來說很好。請檢查哪個是keyCode(是66)? – zengr 2011-02-19 03:19:42

回答

0

不是一個android傢伙,但它註冊兩次的事實使我認爲OnKey包含onKeyDown和onKeyUp。聽onKeyUp會爲你工作嗎?

4

的Try ...

Display.setOnKeyListener(new OnKeyListener() {  
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     switch (keyCode) { 
      case KeyEvent.KEYCODE_ENTER: 

       // Check for ACTION_DOWN only... 
       if (KeyEvent.ACTION_DOWN == event.getAction()) { 
        solveExpression(); 
        return true; 
       } 
     } 
    } 
}); 

'操作' 可以ACTION_DOWNACTION_UPACTION_MULTIPLE(最後一次是當一個鍵被按下並保持)。 onKey()將被調用任何/所有這些操作。

正如其他答案所提到的那樣,它會觸發兩次,因爲它曾經是下來,一次是上漲。

+0

只在`KeyEvent.ACTION_DOWN`上觸發許多調試輸出纔會觸發logcat中的許多調試輸出:`ACTION_DOWN,但鍵已關閉,此事件不是重複鍵。 – ForeverLearning 2015-08-05 16:20:12

+0

這樣做會停止監聽keyevent dpad_center as onClick – 2016-04-07 10:58:30

2
if (event.getAction()!=KeyEvent.ACTION_DOWN) // we catch only key down events 
    return true; 

因此,您停止監聽其他keyevents作爲onClick。

如果在鏈得到了另一塊工作的情況下,希望別人進一步,你應該設置

return false;