为什么onKey()调用两次?

SPB*_*SPB 82 android

我正在使用此代码:

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;
        };
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我为什么当我按下回车时它会打两次?

Red*_*dax 197

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

        });
Run Code Online (Sandbox Code Playgroud)

  • 您应该在未处理的键上返回false? (6认同)
  • 返回true或false对超类有什么意义吗? (2认同)
  • 对于未处理的密钥,显然应该是`return false`.我把这段代码放进去,当`EditText`有焦点时我的应用程序停止响应后退按钮... (2认同)

小智 6

 itemView.setOnKeyListener(new View.OnKeyListener() {
  @Override
  public boolean onKey(View v, int keyCode, KeyEvent event) {
    int pos = getAdapterPosition();
    if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_MENU){
     //code here
    }
    return false;
  }
 });
Run Code Online (Sandbox Code Playgroud)