デバッグセッション中に、奇妙なことが起こっているのを見つけました。ユーザーが入力しているときに検証を実行するようにEditText
現在のアクティビティを定義したコントロールがあります。OnKeyListener
コード
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これは、ユーザーがEnterキーを押したときに、ソフトキーボードを閉じるだけでなく、検証を再度実行するのに非常に冗長であることを認めることができます。ただし、OnKeyイベントが2回ディスパッチされていることがわかりました。
たとえば、私は書いて3551234567
いて、すでに入力しました355
。1を押すと、1つのイベントがv.getText()
=で発生355
し、次の別のイベントがv.getText()
=で発生し3551
ます。
これが正常であるかどうか、およびこれが「preOnKeyEvent」であるか「postOnKeyEvent」であるかを区別することで回避できるかどうかを知りたいです。文字列はイベントの前ではなく、イベントの後にのみ必要です。
ありがとうございました