J'utilise ce code:
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;
};
Quelqu'un peut-il me dire pourquoi il frappe deux fois lorsque j'appuie sur Entrée?
Réponses:
OnKey est déclenché deux fois: la première fois pour la touche enfoncée et la deuxième fois pour la touche vers le haut, vous devez donc filtrer:
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; } });
la source
return false
pour les clés non traitées. J'ai mis ce code et lorsque leEditText
focus a été mis sur mon application cesse de répondre au bouton de retour ...event.getAction()!=KeyEvent.ACTION_DOWN
, mais je reviensfalse
dans ce cas. Sitrue
, toutes les autres clés seront consommées. Vous ne quitterez même pas votre activité / fragment avec le bouton Retour!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; } });
la source
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; }
ce bloc de code empêche d'appeler le code deux fois. J'utilise la valeur de chaîne loadCount, si loadCount == 0 exécute mon bloc de code et je fais loadCount ++ dans mon bloc if. Ainsi, mon bloc de code fonctionne à temps.
la source