während meiner Debug-Sitzungen fand ich eine seltsame Sache vorkommende. Ich habe ein EditText
Steuerelement, für das ich die aktuelle Aktivität als OnKeyListener
definiert, um die Validierung während der Benutzertypen durchzuführen.OnKey-Ereignis zweimal ausgelöst, wenn ich Text in ein Textfeld eintippe. Wie man etwas vorbeugt?
-Code
txtPhoneNumber.setOnEditorActionListener(this);
txtPhoneNumber.setOnKeyListener(this);
txtPhoneNumber.setOnFocusChangeListener(this);
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
String phoneNumber = ((TextView) v).getText().toString();
if (phoneNumber != null && !"".equals(phoneNumber))
setValidPhoneNumber(checkValidPhoneNumber(phoneNumber));
setForwardButtonEnabled(this.validPhoneNumber && this.readyToGo);
if (actionId == EditorInfo.IME_ACTION_DONE) {
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(v.getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
return false;
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
String phoneNumber = ((TextView) v).getText().toString();
if (phoneNumber != null && !"".equals(phoneNumber))
setValidPhoneNumber(checkValidPhoneNumber(phoneNumber));
setForwardButtonEnabled(this.validPhoneNumber && this.readyToGo);
return false;
}
OK Ich kann zugeben, dass dies ziemlich überflüssig ist die Validierung erneut auszuführen, wenn der Benutzer die Enter-Taste drückt, mehr als nur die Soft-Tastatur schließen. Ich habe jedoch festgestellt, dass das OnKey-Ereignis zweimal ausgelöst wird.
Zum Beispiel schreibe ich 3551234567
und ich tippte bereits 355
. Wenn ich 1 drücke, wird ein Ereignis ausgelöst mit v.getText()
= 355
und als nächstes ein anderes Ereignis hat v.getText()
= 3551
= 3551
.
Ich würde gerne wissen, ob das normal ist und wenn dies vermieden werden kann, indem Sie unterscheiden, ob dies ein "preOnKeyEvent" oder "postOnKeyEvent" ist. Ich brauche nur die Zeichenfolge nach das Ereignis, nicht vor.
Vielen Dank
Ich bin nicht sicher, wie vielleicht -------------- event.getAction() == KeyEvent. ACTION_UP? –
Das ist genau wie :) –