У меня точно такая же проблема. Я могу подтвердить утверждение Kre8 о том, что это происходит только в том случае, если задан определенный тип ввода (в моем случае textNoSuggestion / singleLine). Позже я объясню, почему это так.
Я решил проанализировать, что происходит внутри View. В конце концов, я могу сказать, что это не ошибка, возможно, несчастное созвездие :). EditText, для которого вы запросили фокус, правильно получает его.
Ваша первая, возможно, неопознанная проблема заключается в том, что EditorActionListener вызывается дважды. Один раз для ключа вверх и один раз для вниз. Я не знаю, как вы проверяли actionId, так что, возможно, ваш код не будет выполнен дважды.
Так что я неправильно позвонил в своем запросе на решение проблемы с ключевым событием ACTION_DOWN. EditText получил фокус правильно, НО на приближающемся событии ACTION_UP, которое каким-то образом интерпретируется вновь сфокусированным EditText, фокус был немедленно отправлен обратно в ранее отправленный фокус EditText, потому что он находится в поиске фокуса при следующем получении.
Так что я думаю, что теперь тип ввода оказывает влияние, потому что, если EditText находится в многострочном режиме, клавиша ввода не будет отправлять фокус дальше.
Мое окончательное рабочее решение выглядит так:
passwordEditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER && v == passwordEditText) {
if (event.getAction() == KeyEvent.ACTION_UP) {
if (userEditText.length() > 0 && passwordEditText.length() > 0) {
login();
}
if (userEditText.length() == 0) {
userEditText.requestFocus();
}
}
return true;
}
return false;
}
});
Надеюсь, это сработает и у вас:)
Edit: я забыл указать, что тип ввода EditText может быть выбран по вашему желанию, потому что метод onEditorAction обрабатывает и вверх, и вниз.