2016-09-01 5 views
0

Я хочу обработать щелчок на кнопке «ok» экранной клавиатуры. Для этой цели я добавил KeyListener в текстовом поле:Почему KeyListener.onKey запускается дважды?

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 выполняется дважды. Но почему?

ответ

2

Per KeyEvent's documentation:

Каждое нажатие клавиши описывается последовательность ключевых событий. Нажатие клавиши начинается с события ключа с ACTION_DOWN.

Последнее ключевое событие: ACTION_UP для ключа вверх.

Вы должны проверить результат getAction() для фильтрации только для ключа действия вы хотите (то есть, ACTION_UP, если вы только хотите, чтобы вызвать, когда пользователь отпускает или ACTION_DOWN, если вы хотите, чтобы вызвать как только они нажмите кнопку).

+0

Я выбрал решение с ACTION_UP, и он отлично работает! – altralaser

Смежные вопросы