Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么KeyListener.onKey会触发两次?_Java_Android_Keylistener - Fatal编程技术网

Java 为什么KeyListener.onKey会触发两次?

Java 为什么KeyListener.onKey会触发两次?,java,android,keylistener,Java,Android,Keylistener,我想点击屏幕键盘上的“ok”键。为此,我在文本字段中添加了一个KeyListener: textField = (EditText) view.findViewById(R.id.text_field); textField.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View view, int keyCode, KeyEvent event) { boolean handled =

我想点击屏幕键盘上的“ok”键。为此,我在文本字段中添加了一个KeyListener:

textField = (EditText) view.findViewById(R.id.text_field);
textField.setOnKeyListener(new OnKeyListener() {
  @Override
  public boolean onKey(View view, int keyCode, KeyEvent event) {
    boolean handled = false;
    if (keyCode == KeyEvent.KEYCODE_ENTER) {
      okPressed(view);
      handled = true;
    }
    return handled;
  }
});
在okPressed方法中,我检查内容:

private void okPressed(View view) {
  String value = textField.getText().toString().trim();
  if (value.equals("")) {
    Toast.makeText(view.getContext(), "Error", Toast.LENGTH_SHORT).show();
    return;
  }
}
现在,对于文本字段不是空的情况,一切都正常。但是,如果字段不包含文本,我的okPressed方法将执行两次。但是为什么呢?

Per:

每个按键都由一系列按键事件描述。按键开始时,按键事件为

最后一个按键事件是一个按键向上的事件


您应该检查的结果,以仅筛选您想要的关键操作(即,如果您只想在用户释放时触发操作,则选择“向上”,如果您想在用户触按按钮时触发操作,则选择“向下”)。

我选择了带有“向上”操作的解决方案,该解决方案工作正常!