3

我正在使用 2 个编辑文本创建登录屏幕: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 时,程序会尝试登录服务器。

在调试模式下,我看到当我按下 Enter一次(在 etUsername 上)时,首先:调用 etUsername.onKey(),然后调用 etPassword.onKey()!

如何修改代码以使 ENTER 事件仅对当前字段处理一次?

4

1 回答 1

4

在检查按下了哪个键之前,请尝试添加对发生哪个键事件的检查。我猜它首先触发 key-down 事件,然后将焦点移动到第二个文本字段,这里它也触发 key-up 事件。

有关如何检查事件类型和键的示例,请参见此处:使用软键盘上的“ENTER”键而不是单击按钮

我不是 100% 确定这一点,但值得一试:-)

于 2010-12-28T10:49:31.597 回答