OnKeyListener更改EditText

时间:2016-08-12 18:49:00

标签: android

我正在尝试使用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);

2 个答案:

答案 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;       
}