usr*_*ΛΩΝ 2 android event-handling android-event
在我的调试会话期间,我发现了一件奇怪的事情.我有一个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;
}
Run Code Online (Sandbox Code Playgroud)
好的我可以承认,当用户按下Enter键时再次执行验证是非常多余的,而不仅仅是关闭软键盘.但是我发现OnKey事件被调度了两次.
例如,我正在写作3551234567,我已经输入了355.当我按下1时,会触发一个事件v.getText()= = 355,然后另一个事件具有v.getText()= 3551.
我想知道这是否正常,如果可以通过区分这是"preOnKeyEvent"还是"postOnKeyEvent"来避免这种情况.事件之后我只需要字符串,而不是之前.
谢谢
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |