Подтвердить что ты не робот

Введите ключ в EditText, дважды нажав кнопкуKey

Я привязал OnKeyListener к EditText. Я перепробовал обработчик onKey для захвата KeyEvent.

Когда пользователь нажимает клавишу ввода (либо их компьютер вводит ключ при использовании эмулятора, либо аппаратный ключ ввода на своем телефоне с аппаратной клавиатурой), обработчик onKey выполняется дважды. Оба исполнения имеют keyCode 66.

Почему это происходит?

Я хочу, чтобы мой экран, когда пользователь нажимает клавишу ввода, выполняется поиск. Из-за того, что происходит, поиск бесполезно происходит дважды.

Мой метод выглядит следующим образом:

   mFilter.setOnKeyListener(new View.OnKeyListener() {

        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_ENTER) {
                // perform search
                return true;
            }
            return false;
        }
    });
4b9b3361

Ответ 1

Ахххх

Я думаю, что это происходит для клавиш и клавиш?

Ответ 2

if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction()==0) {

Ответ 3

Попробуйте следующее:

mFilter.setOnKeyListener(new View.OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            if (keyCode == KeyEvent.KEYCODE_ENTER) {
                // perform search
                return true;
            }
        }
        return false;
    }
});

Ответ 4

вы можете фильтровать вот так:

object.setOnKeyListener(new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {

            if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
                // do stuff
                return true;
            }

            return false;
        }
    });

idem, когда вы нажимаете клавишу с KeyEvent.ACTION_DOWN

Ответ 5

У меня была такая же проблема, и ответы выше помогли мне, но я использую Xamarin.Android(С#), так что это немного другой синтаксис.. Вот что сработало для меня:

MyStringTextBox.KeyPressed += OnEnterKeyPressed;

protected void OnEnterKeyPressed(object sender, View.KeyEventArgs e)
{
    if (e.KeyCode == Keycode.Enter && e.Event.Action == KeyEventActions.Up)
    {
        DoSomething(this, EventArgs.Empty);
    }
    else
    {
        e.Handled = false;
    }
}

Таким образом, DoSomething() будет вызываться только при нажатии клавиши Enter (Up) и, таким образом, будет запускаться один раз. Работает и тестируется на Xamarin.Android

Ответ 6

Это событие запускается KeyEvent.ACTION_DOWN и KeyEvent.ACTION_UP. Я сделал отладку, и, наконец, я понял, что есть параметр KeyEvent event, который я никогда не использую, затем я проверил и нашел проблему.