Я использую этот код:
public boolean onKey(View v, int keyCode, KeyEvent event) {
msg = (EditText)findViewById(R.id.msg);
String message = msg.getText().toString();
if(keyCode == 66)
{
//It's hitting here twice.
}
return false;
};
Кто-нибудь может сказать мне, почему он ударяется дважды, когда я нажимаю Enter?
Ответы:
OnKey запускается дважды: первый раз для нажатия клавиши и второй раз для нажатия клавиши, поэтому вам нужно отфильтровать:
YOUR_VIEW.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { //This is the filter if (event.getAction()!=KeyEvent.ACTION_DOWN) return true; switch (keyCode) { case KeyEvent.KEYCODE_1 : MakeToast(1); break; case KeyEvent.KEYCODE_2 : MakeToast(2); break; case KeyEvent.KEYCODE_3 : MakeToast(3); break; } return true; } });
источник
return false
для ключей, которые не обрабатываются. Я ввожу этот код, и когда онEditText
находится в фокусе, мое приложение перестает реагировать на кнопку «Назад» ...event.getAction()!=KeyEvent.ACTION_DOWN
, но я вернусьfalse
в этом случае. Еслиtrue
, любые другие ключи будут использованы. Вы даже не выйдете из своей активности / фрагмента кнопкой Назад!itemView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { int pos = getAdapterPosition(); if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_MENU){ //code here } return false; } });
источник
edittext.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View view, int i, KeyEvent keyEvent) { if (keyEvent.getAction() == KeyEvent.ACTION_DOWN || keyEvent.getAction() == KeyEvent.ACTION_UP) { switch (i) { case KeyEvent.KEYCODE_ENTER: if (!HelperFunction.isStringEmpty(edittext.getText().toString())) { if (loadCount == 0) { loadCount ++; } } default: return false; } } return false; }
этот блок кода предотвращает повторный вызов кода. Я использую строковое значение loadCount, если loadCount == 0 запускает мой блок кода, а я выполняю loadCount ++ в своем блоке if. Так что блок My Code работает вовремя.
источник