【问题标题】:Why KeyListener.onKey triggers twice?为什么 KeyListener.onKey 会触发两次?
【发布时间】:2017-01-08 19:48:27
【问题描述】:

我想处理点击屏幕键盘的“确定”键。为此,我在文本字段中添加了一个 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 方法会执行两次。但为什么呢?

【问题讨论】:

    标签: java android keylistener


    【解决方案1】:

    KeyEvent's documentation:

    每个按键都由一系列按键事件描述。按键以 ACTION_DOWN 的按键事件开始。

    最后一个按键事件是一个ACTION_UP 按键。

    您应该检查getAction() 的结果以仅过滤您想要的关键操作(即,如果您只想在用户释放时触发,则为 ACTION_UP,如果您想在用户触摸按钮时立即触发,则为 ACTION_DOWN) .

    【讨论】:

    • 我选择了带有 ACTION_UP 的解决方案,效果很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2021-07-08
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多