我有两个EditText字段,一个用于用户名,另一个用于密码。当我输入用户名并按回车键时,我希望焦点切换到密码。当我完成密码并按回车键时,也会运行一些代码。
我的问题是,当我输入用户名的代码并按回车键时,两段代码都会运行。以下是我的代码:
userNameEditText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER && userNameEditText.hasFocus()) {
passwordEditText.requestFocus();
return true;
}
return false;
}
});
passwordEditText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER && passwordEditText.hasFocus()) {
attemptLogin(userNameEditText, passwordEditText);
InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(activity.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(passwordEditText.getWindowToken(), 0);
return true;
}
return false;
}
});
当我按下键盘上的Enter键时,我该怎么办才能运行所选EditText的代码?
答案 0 :(得分:2)
您的问题是您尚未测试KeyEvent的类型。
第一个侦听器在event.getAction()== ACTION_DOWN时被触发,然后在event.getAction()== ACTION_UP时触发第二个侦听器。
您需要更改您的侦听器以检查操作类型和键,我建议您仅在ACTION_UP上触发操作。