Android - вызов возврата без запуска onTextChanged

Итак, в настоящее время я работаю над приложением, которое принимает пользовательский ввод, запускает возврат, чтобы удалить ввод, а затем добавляет какой-то другой текст. (Так что да, я в основном переопределяю их ввод с помощью TextWatcher)

Нет проблем: когда я вызываю text.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));, он снова и снова будет запускать onTextChanged. Теперь есть ли способ удалить пользовательский ввод без повторного запуска onTextChanged?

Спасибо!


person Sam    schedule 24.02.2015    source источник
comment
Вы пытались установить текст напрямую? Что-то вроде textView.setText(text.substring(0, длина - 1)).   -  person Adam S    schedule 24.02.2015


Ответы (3)


Не отправляйте ключевые события внутри обратного вызова onTextChanged. Вы можете сохранить внутренний буфер с текстом и установить весь TextView в этот буфер при каждом интересном ключевом событии.

person Bogdan V.    schedule 24.02.2015

Я исправил это, вызвав edittext.removeTextChangedListener(this);, затем отправив ключ, а затем снова вызвав edittext.addTextChangedListener(this);. это тоже чистый способ? рад услышать ваши мнения.

person Sam    schedule 25.02.2015

Вероятно, вы пытаетесь изменить текст, который только что изменил пользователь, используя TextWatcher. Чтобы сделать это, лучше всего использовать метод afterTextChanged:

public abstract void afterTextChanged (Editable s)

Этот метод вызывается, чтобы уведомить вас о том, что где-то внутри s текст был изменен. Вполне законно вносить дальнейшие изменения в s из этого обратного вызова, но будьте осторожны, чтобы не попасть в бесконечный цикл, потому что любые сделанные вами изменения приведут к повторному рекурсивному вызову этого метода.

Чтобы избежать рекурсии, вы можете установить флаг, указывающий, что именно вы меняете текст, и снять этот флаг при следующем вызове. Вы также можете использовать другие обратные вызовы (beforeTextChanged и onTextChanged) для сбора дополнительной информации об изменении.

Ссылка: http://developer.android.com/reference/android/text/TextWatcher.html

person Filipe Borges    schedule 24.02.2015