Android OnKeyListener更改编辑文本

Android OnKeyListener更改编辑文本,android,Android,我正试图使用OnKeyListener根据条目更改EditText的内容,但我在这样做时遇到了问题,因为它似乎被调用了两次 以下是代码的简化版本: public class MyKeyListener implements View.OnKeyListener{ EditText et; public MyKeyListener(EditText editText){ this.et = editText; } public boolean o

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

你在用硬件键盘吗?根据软键,键盘不必调用onKeyListener回调。也就是说,您看到它被调用两次的原因是因为有一个onKeyDown事件和一个onkeydup事件。在onKey(…)方法中,您应该检查KeyEvent以对预期事件作出反应(向下或向上)。

您使用的是硬件键盘吗?根据软键,键盘不必调用onKeyListener回调。也就是说,您看到它被调用两次的原因是因为有一个onKeyDown事件和一个onkeydup事件。在onKey(…)方法中,您应该检查KeyEvent以对预期事件做出反应(向下或向上)。

对于两次调用事件,我认为您可以从@RScottCarson的答案中了解到这一点。对于您正在使用的
软键盘
,可以通过以下方式检测退格:

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {

    if(keyCode == KeyEvent.KEYCODE_DEL) {  
        // for backspace...check
    }
    //rest of the code
    return false;       
}

两次呼吁这一事件,我想你从@RScottCarson的回答中就知道了。对于您正在使用的
软键盘
,可以通过以下方式检测退格:

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {

    if(keyCode == KeyEvent.KEYCODE_DEL) {  
        // for backspace...check
    }
    //rest of the code
    return false;       
}

谢谢我会检查的!至于键盘,我使用的是软键盘,但我看不到任何其他检测退格键的方法(我以前使用的是TextWatcher,但它不检测退格…),谢谢。我会检查的!至于键盘,我使用的是软键盘,但我看不到任何其他检测退格键的方法(我以前使用的是TextWatcher,但它不检测退格…)但这不是只保证对硬键盘有效吗?我认为对软键盘也有效…你可以尝试,但这不是只保证对硬键盘有效吗?我认为对软键盘也有效…你可以尝试