我正在使用2个editTexts创建登录屏幕:etUsername和etPassword。
在etUsername上,用户应输入用户名并按Enter进入编辑文本etPassword,然后输入密码,按Enter键登录。这是我目前的代码:
etUsername.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_ENTER)) {
etPassword.requestFocus();
return true;
} else
return false;
}
});
etPassword.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_ENTER)) {
loginToServer();
return true;
} else
return false;
}
});
但是当我输入用户名,然后按Enter键时,程序会尝试登录服务器。
在调试模式下,我看到当我按下一次(在etUsername上)时,首先调用:etUsername.onKey(),然后调用etPassword.onKey()!
如何修改代码,以便只对当前字段处理一次ENTER事件?
答案 0 :(得分:4)
在检查按下了哪个键之前,请尝试添加检查发生了哪个键事件。我猜它首先触发按键事件,然后你将焦点移动到第二个文本字段,这里它也会触发关键事件。
有关如何检查事件类型和密钥的示例,请参阅此处:Use "ENTER" key on softkeyboard instead of clicking button
我对此并不是百分之百确定,但值得一试: - )