Обнаружение возврата в TextWatcher

Я использую TextWatcher и не могу обнаружить клавишу Backspace в событии TextWatcher.afterTextChange. Я также хочу очистить textView при каком-то условии в событии textWatcher.

public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
    // I want to detect backspace key here
}

person Jay Gajjar    schedule 30.08.2012    source источник
comment
Код для вашего TextWatcher пожалуйста ?   -  person Swayam    schedule 30.08.2012
comment
public void afterTextChanged(Editable s) { // TODO Автоматически сгенерированный метод-заглушка // Я хочу обнаружить здесь клавишу возврата }   -  person Jay Gajjar    schedule 30.08.2012


Ответы (2)


KeyListener может выполнить оба ваших условия.

mEditText.setOnKeyListener(new OnKeyListener() {                 
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
           if(keyCode == KeyEvent.KEYCODE_DEL){  
             //on backspace
             }
    return false        
        }
});

Точно так же внутри onKey() вы можете поместить несколько операторов проверки для проверки условия, когда вы хотите очистить textView.

EDIT: Как любезно указал @RankoR, имейте в виду, что onKeyListener() работает только с аппаратными клавиатурами, а не с программными клавиатурами. .

person Swayam    schedule 30.08.2012
comment
OnKeyListener работает только для аппаратных клавиатур. - person artem; 28.03.2013
comment
@RankoR: Да, я знаю, что onKeyListener не работает с программной клавиатурой. Но если бы вы еще раз прошлись по вопросу, то увидели бы, что вопрос не специфичен для софт-клавиатуры. Но, да.. опять же, вы высказали в значительной степени правильное замечание. Отредактирую мой ответ, чтобы включить вашу точку зрения. - person Swayam; 28.03.2013
comment
@RankoR: отредактировал ответ. Может быть, вы можете пересмотреть свой против сейчас. :D - person Swayam; 28.03.2013
comment
Спасибо, убрал -1 и добавил +1 ;) - person artem; 28.03.2013
comment
Теперь, это действительно тактично с вашей стороны! Благодаря тонну! :D - person Swayam; 28.03.2013
comment
Это не работает на Android 4.1 - person Cuong Thai; 03.06.2013
comment
Спасибо за ваш вклад. Я рассмотрю этот вопрос и посмотрю, смогу ли я заставить что-то работать. Или у вас уже есть решение для 4.1..? - person Swayam; 03.06.2013

Чтобы обнаружить возврат в TextWatcher, вы можете проверить переменную count, которая передается в функцию onTextChange (счетчик будет равен 0, если был введен возврат), например так:

@Override
public void onTextChanged(CharSequence cs, int start, int before, int count) {

  if (react) {
    if (count == 0) {
      //a backspace was entered
    }

    //clear edittext
    if(/*condition*/) {
      react = false;
      setText("");
      react = true;
    }
  }
}

Реакция boolean необходима для функции setText(), иначе она станет рекурсивной. Надеюсь это поможет!

person RyuHayaboosa    schedule 29.01.2014
comment
Он не выполняет обратный вызов, когда не будет изменения текста, то есть когда s.length() = 0, какая бы клавиша ни была нажата, обратного вызова не будет. - person DJphy; 10.06.2015
comment
В onTextChanged не поступает обратный вызов, когда нажата кнопка «Назад», а в EditText нет символа. Не уверен, почему этот ответ даже выходит здесь! - person sud007; 18.05.2017
comment
если введен один пробел, то также count == 0 - person Bincy Baby; 21.08.2017