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, если он вызывается из-за нажатия клавиши ввода.