Nano Hash - криптовалюты, майнинг, программирование

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

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

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);. В чем может быть проблема?


  • Это похоже на ошибку на самом деле. У меня тоже так было, когда я поставил метку на кнопку GO. 13.10.2014

Ответы:


1

попробуй это

объявить 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();
              Toast.makeText(getActivity(), "You entered "+id,    Toast.LENGTH_LONG).show();
              callVolley();
              handled = true;
            }
            return handled;
        }
});

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

18.10.2014
  • да, работает, не могли бы вы рассказать, в чем была настоящая проблема? 18.10.2014
  • если мы используем imeoptions и ImeActionLabel, тогда edittext предпочитает imeoptions, а не ImeActionLabel, поэтому вы не являетесь огненным событием. 18.10.2014

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

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

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

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

    19.10.2014

    3

    Я проверил версии 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);
    
    13.10.2014
  • Я тестировал в 4.4, пользовательские клавиатуры не используются. Мой код запускается, когда Imeactionlabel не используется. Я бы заменил KeyEvent.KEYCODE_ENTER на EditorInfo.IME_ACTION_GO и сообщил бы вам, работает ли он. 13.10.2014

  • 4

    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);
    
    10.10.2014
  • Нет, это не сработает... На самом деле действие редактора работает, если ImeActionLabel не установлен!!! 10.10.2014
  • Я хочу знать, в чем проблема, из-за которой действие редактора не срабатывает, когда мы устанавливаем ImeActionlabel. МОЖЕТ КТО-НИБУДЬ ЗДЕСЬ ОБЪЯСНИТЬ ЭТО? 13.10.2014
  • Я действительно не знаю, но я хотел бы исследовать это, когда у меня будет время позже 13.10.2014
  • Я изменил свой ответ. Я обновил его реальным кодом, и он работает для меня. 16.10.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..