OnEditorAction() не вызывается после нажатия клавиши Enter на эмуле Jelly Bean

У меня возникла проблема с поведением последнего эмулятора Jelly Bean. У меня есть несколько EditTexts в моем приложении. OnEditorActionListener обеспечивает специальную обработку, когда пользователь нажимает клавишу ENTER на клавиатуре. Это работало до ICS, но теперь на Jelly Bean метод обратного вызова слушателя onEditorAction() больше не вызывается. В EditText вставляется только новая строка.

Это можно воспроизвести следующим образом:

EditText testEditText = new EditText(context);
testEditText.setOnEditorActionListener(new OnEditorActionListener() {

    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        Log.d(TAG, "onEditorAction() called");
        return false;
    }
});
addView(testEditText);

Является ли это ошибкой в ​​желе Bean? Или в эмуляторе? Или поведение было изменено намеренно?

Любопытно, что кто-то другой пишет, что метод вызывается, но с неожиданными параметрами, на Nexus 7 работает Jelly Bean здесь: null keyevent и actionid = 0 в onEditorAction() ( Желе Bean/Nexus 7)

Ответы

Ответ 1

Если кто-то еще найдет этот вопрос:

Я тестировал это несколько раз и на эмуляторе Jelly Bean, метод обратного вызова listener onEditorAction() действительно больше не вызывается при нажатии клавиши Enter на виртуальной клавиатуре.

Как я уже упоминал выше, возможным решением или обходным решением является замена клавиши Enter одним из доступных ключей действия. Они все еще срабатывают onEditorAction(). Я также должен был указать тип ввода.

editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setImeOptions(EditorInfo.IME_ACTION_GO);
<EditText
...
android:imeOptions="actionGo"
android:inputType="text" />

Ответ 2

Вот что я сделал, что должно охватывать все типы нажатия Enter:

override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
    if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_NULL)
        ... // Enter pressed

В XML я добавил только android:imeOptions="actionGo"

Причина, согласно документам:

https://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html#onEditorAction(android.widget.TextView,%20int,%20android.view.KeyEvent)

actionId int: Идентификатор действия. Это будет либо указанный вами идентификатор, либо EditorInfo # IME_NULL, если он вызывается из-за нажатия клавиши ввода.