Подтвердить что ты не робот

Знание редактирования редактируемого текста

Как узнать, когда редактируемый текст редактируется? Например, когда пользователь выбирает следующее окно или нажимает кнопку "Готово" на мягкой клавиатуре.

Я хочу знать это, чтобы я мог зажать вход. Он выглядит как наблюдатель текста afterTextChanged происходит после ввода каждого символа. Мне нужно сделать некоторые вычисления с помощью ввода, поэтому я бы хотел избежать вычисления после ввода каждого символа.

спасибо

4b9b3361

Ответ 1

Используя что-то вроде этого

 meditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            switch (actionId){
                case EditorInfo.IME_ACTION_DONE:
                case EditorInfo.IME_ACTION_NEXT:
                case EditorInfo.IME_ACTION_PREVIOUS:
                    yourcalc();
                    return true;
            }
            return false;
        }
    });

Ответ 2

EditText наследует setOnFocusChangeListener, который принимает реализацию OnFocusChangeListener.

Внедрите onFocusChange и там булев параметр для hasFocus. Если это неверно, вы потеряли фокус на другом элементе управления.

ИЗМЕНИТЬ

Для обработки обоих случаев - редактирование текста, теряющего фокус. Пользователь нажимает кнопку "done" - создайте один метод, который вызывается из обоих слушателей.

    private void calculate() { ... }

    btnDone.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            calculate();
        }
    });

    txtEdit.setOnFocusChangeListener(new OnFocusChangeListener() {          

        public void onFocusChange(View v, boolean hasFocus) {
            if(!hasFocus)
                calculate();
        }
    });

Ответ 3

Использование объекта EditText xml, определенного следующим образом:

    <EditText
        android:id="@+id/create_survey_newquestion_editText_minvalue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:ems="4"
        android:imeOptions="actionDone"
        android:inputType="number" />

Мы можем записать его текст: i) когда пользователь нажимает кнопку "Готово" на мягкой клавиатуре (OnEditorActionListener) или ii), когда EditText потерял фокус пользователя (OnFocusChangeListener), который теперь находится на другом EditText:

    /**
     * 3. Set the min value EditText listener
     */
    editText= (EditText) this.viewGroup.findViewById(R.id.create_survey_newquestion_editText_minvalue);
    editText.setOnEditorActionListener(new OnEditorActionListener()
    {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
        {
            String input;
            if(actionId == EditorInfo.IME_ACTION_DONE)
            {
                input= v.getText().toString();
                MyActivity.calculate(input);
                return true; // consume.
            }
            return false; // pass on to other listeners.
        }
    });
    editText.setOnFocusChangeListener(new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View v, boolean hasFocus)
        {
            String input;
            EditText editText;

            if(!hasFocus)
            {
                editText= (EditText) v;
                input= editText.getText().toString();
                MyActivity.calculate(input);
            }
        }
    });

Это работает для меня. Вы можете скрыть мягкую клавиатуру после выполнения вычислений с помощью следующего кода:

private void hideKeyboard(EditText editText)
{
    InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}

Изменить: добавлены возвращаемые значения в onEditorAction

Ответ 4

Я сделал эту простую вещь, когда фокус смещен от текста редактирования, получите текст. Это будет работать, если пользователь переключит фокус, чтобы выбрать другие виды, такие как кнопка или другое EditText или любое представление.

        editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                EditText editText = (EditText) v;
                String text = editText.getText().toString();
             }
        }
    });