我正在尝试使用OnKeyListener根据条目更改EditText的内容,但是我在执行此操作时遇到了问题,因为它似乎被调用了两次。
以下是代码的缩写版本:
public class MyKeyListener implements View.OnKeyListener{
EditText et;
public MyKeyListener(EditText editText){
this.et = editText;
}
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_0){
this.et.setText("0");
} else {
this.et.setText("1");
}
}
}
在主要活动中我有这个:
EditText et = (EditText) findViewById(R.id.myET);
MyKeyListener mkl = new MoneyKeyListener(et);
et.setOnKeyListener(mkl);
答案 0 :(得分:1)
您使用的是硬件键盘吗?根据{{3}}软键盘不必调用onKeyListener回调。话虽这么说,你看到它被调用两次的原因是因为有一个onKeyDown事件和一个onKeyUp事件。在onKey(...)方法中,您应检查KeyEvent以对预期事件做出反应(向下或向上)。
答案 1 :(得分:1)
对于两次调用此事件,我想您从@RScottCarson的答案中了解到这一点。对于您正在使用的softkeyboard
,可以通过以下方式检测退格:
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_DEL) {
// for backspace...check
}
//rest of the code
return false;
}