Estoy usando este código:
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;
};
¿Alguien puede decirme por qué está presionando dos veces cuando presiono enter?
Respuestas:
OnKey se dispara dos veces: la primera vez para presionar la tecla y la segunda para subir la tecla, por lo que debe filtrar:
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; } });
fuente
return false
para claves no procesadas. Puse este código y cuando elEditText
enfoque tiene mi aplicación deja de responder al botón de retroceso ...event.getAction()!=KeyEvent.ACTION_DOWN
, pero vuelvofalse
en este caso. Sitrue
, se consumirán otras claves. ¡Ni siquiera saldrá de su actividad / fragmento con el botón Atrás!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; } });
fuente
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; }
este bloque de código evita llamar al código dos veces. Utilizo el valor de cadena loadCount, si loadCount == 0 ejecuto mi bloque de código y estoy haciendo loadCount ++ en mi bloque if. Entonces, el bloque de My Code funciona a tiempo.
fuente