Действие метода ввода EditText не работает при установке imeActionLabel

У меня есть Edittext с imeoptions как actiongo . И я вызвал свое событие, нажав кнопку ввода мягкой клавиатуры.

 mModelId.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { boolean handled = false; // if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { if (actionId == EditorInfo.IME_ACTION_GO) { id = mModelId.getText().toString(); System.out.println("Model id in Edittext:-"+ id); Toast.makeText(getActivity(), "You entered "+id, Toast.LENGTH_LONG).show(); System.out.println("Before Call Volley"); callVolley(); handled = true; } return handled; } }); 

Все работает отлично, но когда я добавляю actionlabel для ввода ключа, событие не срабатывает. mModelId.setImeActionLabel("Search Model", KeyEvent.KEYCODE_ENTER); , В чем может быть проблема?

попробуй это

Объявить edittext и OnEditorActionListener () как это

 mModelId = (EditText) findViewById(R.id.edittext_id); mModelId.setImeActionLabel("Search Model", KeyEvent.KEYCODE_ENTER); mModelId.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { boolean handled = false; if (actionId == KeyEvent.KEYCODE_ENTER) { id = mModelId.getText().toString(); System.out.println("Model id in Edittext:-"+ id); Toast.makeText(getActivity(), "You entered "+id, Toast.LENGTH_LONG).show(); System.out.println("Before Call Volley"); callVolley(); handled = true; } return handled; } }); 

И вы используете imeoptions как actionGo, а затем перезапустите его, я думаю, что он переопределяет ImeActionLabel, как только попробуйте это и ответьте

Я проверил версии Android 2.1 и Android 4.0, и ваш код работает нормально. Событие IME_ACTION_GO сообщается в случае, если EditText имеет параметр singleLine указанный для true . В случае, если он указан в false actionId имеет значение IME_NULL независимо от имени setImeActionLabel или нет.

В методе TextView.onKeyDown я обнаружил, что IME_NULL actionId используется при обнаружении KEYCODE_ENTER

 mEditor.mInputContentType.onEditorActionListener.onEditorAction( this, EditorInfo.IME_NULL, event)) 

Возможно, это проблема с клавиатурой. Вы используете какие-либо? Если да, попробуйте эти изменения:

вместо

 mModelId.setImeActionLabel("Search Model", KeyEvent.KEYCODE_ENTER); 

должно быть

 mModelId.setImeActionLabel("Search Model", EditorInfo.IME_ACTION_GO); 

setImeActionLabel принимает два параметра, а второй параметр int должен быть одним из тех, которые находятся в классе EditorInfo . Такие как:

  EditorInfo.IME_ACTION_GO EditorInfo.IME_ACTION_DONE EditorInfo.IME_ACTION_NEXT .... 

Вы не можете отправить туда любое другое целое число, например KeyEvent.KEYCODE_ENTER

И вам нужно установить параметр imeOptions и singleLine в XML, чтобы он работал. Пример:

 <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:imeOptions="actionGo" android:singleLine="true"/> 

Вот код, который я использовал, и он работает:

XML-макет:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true"/> </LinearLayout> 

И основной код Activity :

  mEditText2.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { boolean handled = false; if (actionId == EditorInfo.IME_ACTION_GO) { Toast.makeText(MainActivity.this, "You entered " + v.getText().toString(), Toast.LENGTH_LONG).show(); handled = true; } return handled; } }); mEditText2.setImeActionLabel("Search Model", EditorInfo.IME_ACTION_GO); 
  1. Поставьте значение для параметра EditorInfo.actionId, когда метод ввода подключен к текстовому виду.

    NumberEditor.mInputContentType.onEditorActionListener.onEditorAction (это, EditorInfo.IME_NULL, событие))

  2. Поставьте значение для параметра EditorInfo.actionLabel, используемого при подключении метода ввода к текстовому виду.

Должно быть строковое значение, используя '\;' Для удаления символов, таких как «\ n» или «\ uxxxx» для символа юникода.