我的问题是这个;
我有一个编辑文本,正在使用 setKeyListener 并创建一个新的 NumberKeyListener。在这个 on keydown 当一个数字被击中时,它按预期工作,但是当按下删除/退格按钮时,它不会在第一次 X 尝试时注册,但在 X + 1 上它会注册,其中 X 是其他的数字我按下的键。例如,如果我输入 5,然后是 6,然后是 7,我的 edittext 将显示为 567,如果我点击删除,没有任何反应,再点击两次,仍然没有,在第 4 次点击时,它最终将删除 7 并成为 56。这很奇怪,因为我在 keydown 回调中有一个日志语句,而且似乎它甚至没有在前 3 次按下时被触发?
任何建议表示赞赏。
更新:我注意到如果我单击编辑文本并返回它,我的删除将在第一次单击时注册。是否有某种与需要清除的编辑文本相关的击键缓冲区或其他东西?
myedittext.setKeyListener(new NumberKeyListener() {
@Override
public int getInputType() {
return InputType.TYPE_CLASS_NUMBER;
}
@Override
public boolean onKeyDown(View view, Editable content, int keyCode, KeyEvent event) {
if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
//logic here
} else if (keyCode == KeyEvent.KEYCODE_DEL) {
Log.i("DEBUG","delete key hit");
//more logic here
}
Log.i("DEBUG","key was pressed");
update();
return true;
}
@Override
protected char[] getAcceptedChars() {
return new char[]{'0','1','2','3','4','5','6','7','8','9'};
}
});
使用上面的代码,我update()
从 keylistener 中删除了所有逻辑和调用,它只是日志打印,我看到了相同的行为,它似乎无法识别前 x 次删除。