Używam tego kodu:
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;
};
Czy ktoś może mi powiedzieć, dlaczego uderza dwa razy, kiedy naciskam Enter?
Odpowiedzi:
OnKey jest uruchamiany dwukrotnie: pierwszy raz dla naciśnięcia klawisza i drugi raz dla klawisza w górę, więc musisz filtrować:
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; } });
źródło
return false
kluczy, które nie są przetwarzane. Umieściłem ten kod i kiedy sięEditText
skupi, moja aplikacja przestaje odpowiadać na przycisk Wstecz ...event.getAction()!=KeyEvent.ACTION_DOWN
, ale wracamfalse
w tej sprawie. Jeślitrue
jakiekolwiek inne klucze zostaną zużyte. Nie wyjdziesz nawet ze swojej aktywności / fragmentu za pomocą przycisku Wstecz!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; } });
źródło
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; }
ten blok kodu zapobiega dwukrotnemu wywołaniu kodu. Używam wartości ciągu loadCount, jeśli loadCount == 0 uruchamia mój blok kodu i robię loadCount ++ w moim bloku if. Więc blok My Code działa na czas.
źródło