Ответ 1
Ахххх
Я думаю, что это происходит для клавиш и клавиш?
Я привязал 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;
}
});
Ахххх
Я думаю, что это происходит для клавиш и клавиш?
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction()==0) {
Попробуйте следующее:
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;
}
});
вы можете фильтровать вот так:
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
У меня была такая же проблема, и ответы выше помогли мне, но я использую 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
Это событие запускается KeyEvent.ACTION_DOWN
и KeyEvent.ACTION_UP
.
Я сделал отладку, и, наконец, я понял, что есть параметр KeyEvent event
, который я никогда не использую, затем я проверил и нашел проблему.