在我的调试过程中,我发现发生了一件奇怪的事情。我有一个EditText
我将当前活动定义为OnKeyListener
在用户键入时执行验证。
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;
}
好吧,我可以承认,当用户按下 Enter 键时再次执行验证是相当多余的,而不仅仅是关闭软键盘。但是我发现 OnKey 事件被调度两次。
例如我正在写3551234567
我已经输入了355
。当我按 1 时,会触发一个事件v.getText()
= 355
接下来另一个事件有v.getText()
= 3551
.
我想知道这是否正常,以及是否可以通过区分这是“preOnKeyEvent”还是“postOnKeyEvent”来避免这种情况。我只需要字符串after事件,而不是before.
谢谢
您可能会同时收到按键按下/按键抬起事件。
尝试通过检查 KeyEvent 的操作是否有 ACTION_UP 操作来过滤您的方法。
Read this http://developer.android.com/reference/android/view/KeyEvent.html了解更多信息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)