2014-10-10 1 views
5

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

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; 
     } 
    }); 

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

+0

На самом деле это ошибка. Это случилось со мной, когда я установил ярлык на кнопку GO. – Darpan

ответ

7

попробовать этот

объявлять 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 затем revome его, я думаю, что это переопределить ImeActionLabel один раз попробовать это и ответ

+0

. Я пытаюсь это сделать, и это работает. – Lokesh

+0

Да, работайте, можете ли вы рассказать, что было настоящей проблемой? – NIPHIN

+1

, если мы используем imeoptions и ImeActionLabel, то тогда edittext предпочтет imeoptions над ImeActionLabel, поэтому вы не являетесь событием пожара. – Lokesh

2

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 Layout:

<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); 
+0

Нет, это не сработает ... На самом деле редактор работает, если ImeActionLabel не установлен !!! – NIPHIN

+0

Можете ли вы попробовать отредактировать imeActionLabel в XML? – tasomaniac

+1

Я хочу знать, в чем проблема, из-за которой редакция не срабатывает, когда мы устанавливаем значениеImeActionlabel. МОЖЕТ ЛИ ЛЮБОЕ ЗДЕСЬ ПОЖАЛУЙСТА, ОБЪЯСНИТЕ, ЧТО? – NIPHIN

2

Я вы проверили на Android 2.1 и Android 4.0 версии, и ваш код работает нормально. IME_ACTION_GO Событие сообщается в случае, если EditText имеет singleLine вариант, указанный для true. В случае, если указано falseactionId имеет 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); 
+0

Я тестировал в 4.4, Никакие пользовательские клавиатуры не используются. Мой код запускается, когда Imeactionlabel не используется. Я бы заменил KeyEvent.KEYCODE_ENTER на EditorInfo.IME_ACTION_GO и сообщит, работает ли он – NIPHIN

2
  1. обеспечивает значение для EditorInfo.actionId используется, когда метод ввода соединен с точкой зрения текста.

    номерEditor.mInputContentType.onEditorActionListener.onEditorAction ( это, EditorInfo.IME_NULL, событие))

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

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