клавиша возврата не обнаруживается в текстовом наблюдателе

В EditText где я хочу добавить счетчик букв. он считает правильно, но когда я ввел backspace, он также считается буквой, и счетчик добавляется на 1, что на самом деле должно быть уменьшено на 1. мой код

text_feedback_text.addTextChangedListener(new TextWatcher()
        {
            public void afterTextChanged(Editable s) 
            {
                                int keyCode = 0;
                if(keyCode==KeyEvent.KEYCODE_DEL){
                    i--;
                    Log.d("back","backspace pressed"+i);
                }else 
                    i++;
                text_feedback_count.setText(String.valueOf(i) + " / " + String.valueOf(charCounts));
            }
            public void beforeTextChanged(CharSequence s, int start, int count, int after){}
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                text_feedback_count.setText(String.valueOf(s.length()));
            }
        } 
        );

Пожалуйста, помогите мне, когда я нажимаю Backspace, он не обнаруживает, а также не печатает на logcat.

Пожалуйста, ответьте, если у кого-то есть какая-то информация.

Спасибо!


person Abhishek Karande    schedule 27.02.2012    source источник
comment
1. TextWatcher для просмотра текста. 2. похоже, вы не понимаете свой собственный код: вы присваиваете 0 коду ключа int keyCode = 0;, а затем сравниваете его с KeyEvent.KEYCODE_DEL... я почти уверен, что KeyEvent.KEYCODE_DEL != 0... поэтому i--; никогда не вызывается...   -  person Selvin    schedule 27.02.2012
comment
@Abhishek Karande также, если мы войдем в пространство, тогда также не работает прослушиватель TextWatcher ... любая помощь здесь?   -  person CoDe    schedule 12.01.2013
comment
stackoverflow.com/questions/12202047/   -  person Damir Mailybayev    schedule 26.12.2016


Ответы (1)


используйте OnKeyListener для вашего editText, чтобы вы могли обнаружить любое нажатие клавиши

editText.setOnKeyListener(new OnKeyListener() {                 
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
           if(keyCode == KeyEvent.KEYCODE_DEL){  
             //Control comes here when backspace is clicked
             }
    return false        
        }
});
person Sunil Kumar Sahoo    schedule 27.02.2012
comment
это не работает на всех телефонах или на всех типах ввода :( - person Tony Ashworth; 08.11.2012
comment
Основываясь на том, что я вижу здесь, комментарий выше имеет смысл. stackoverflow.com/questions/ 4886858/ - person loeschg; 24.04.2013
comment
Это должно работать для аппаратных клавиатур. Тип клавиатуры не ясен из вопроса, поэтому я думаю, что этот ответ не заслуживает отрицательных голосов. - person naXa; 07.06.2014
comment
Хотя было бы здорово указать на это ограничение. - person naXa; 07.06.2014
comment
if(if(before›count), значит до изменения текст был длиннее текущего, значит удаляем букву (или больше). - person EsmaeelQash; 28.09.2017