2010-09-27 63 views
70

Tôi đang sử dụng mã này:Tại sao onKey() được gọi hai lần?

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

bất cứ ai có thể vui lòng cho tôi biết tại sao nó đánh hai lần khi tôi nhấn enter?

+15

Khi xuống, một lần lên? Hãy thử onKeyDown() hoặc onKeyUp() hoặc kiểm tra KeyEvent.getAction(). – benvd

Trả lời

161

OnKey là bắn hai lần: lần đầu tiên cho khóa xuống, và lần thứ hai cho khóa lên, vì vậy bạn phải lọc:

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

Cảm ơn vì điều này, tôi đã có một 5 phút ngu ngốc. Tôi cũng đang gõ 'sh * t' thay vì 'this', thần chết tiệt. –

+2

Trả lại đúng hay sai có ý nghĩa gì đối với các lớp học siêu hạng? – OrhanC1

+5

Bạn nên trả về false trên các khóa không được xử lý? – yostane

Các vấn đề liên quan