Estou 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;
};
Alguém pode me dizer por que está batendo duas vezes quando pressiono Enter?
Respostas:
OnKey é disparado duas vezes: a primeira vez para a tecla pressionada e a segunda vez para a tecla acima, então você deve 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; } });
fonte
return false
para chaves não processadas. Coloquei este código e quando oEditText
foco meu aplicativo para de responder ao botão Voltar ...event.getAction()!=KeyEvent.ACTION_DOWN
, mas voltofalse
neste caso. Setrue
, qualquer outra chave será consumida. Você nem sairá de sua atividade / fragmento com o botão Voltar!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; } });
fonte
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 bloco de código evita chamar o código duas vezes. Eu uso o valor loadCount String, se loadCount == 0 execute meu bloco de código e estou fazendo loadCount ++ em meu bloco if. Portanto, meu bloco de código funciona na hora certa.
fonte