Как избежать возврата в методе EditText afterTextChanged () - PullRequest
0 голосов
/ 14 января 2020

Итак, я реализовал простой метод замены, который заменяет символ непосредственно перед изменением текста.

 @Override
 public void afterTextChanged(Editable s) {

     editText.removeTextChangedListener(this);

     if (s.length() == 0)
       return;
       s.replace(editText.getSelectionStart(),editText.getSelectionStart()+1,"PP");

     editText.addTextChangedListener(this);
}

Поскольку это эффективно для всех видов изменения текста, он добавляет «PP», даже когда я нажимаю кнопку возврата на пробел. Есть ли способ исключить возврат из этого?

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Сначала обнаружить нажатие Backspace или нет

, а затем избежать замены при нажатии Backspace

editText.addTextChangedListener(new TextWatcher() {

        //Normally assume that Backspace not pressed 
        boolean isNotBackspace = true;

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //if current count is grater then before that means char added
            //So if current count is smaller then before that means backspace pressed 
            isNotBackspace = count>before;
        }

        @Override
        public void afterTextChanged(Editable s) {

            editText.removeTextChangedListener(this);
            Log.e("isNotBackButton", isNotBackButton+"");

            if (s.length() == 0) {
                //Edit is here 
                //return; //need to block return; because this preventing
                //from adding  adding addTextChangedListener
                isNotBackButton = true;
            //if not backspace pressed then proceed else no action 
            }else if(isNotBackButton){
                s.replace(editText.getSelectionStart(), editText.getSelectionEnd(), "PP");
            }

            editText.addTextChangedListener(this);

        }
 });
0 голосов
/ 14 января 2020

Вы можете использовать глобальную логическую переменную, которая сообщит вам, должен ли выполняться код внутри afterTextChanged().

Чтобы сделать это, вы должны добавить View.onKeyListener() к вашему editText и просто добавить thatBooleanVariable = keyCode != KeyEvent.KEYCODE_DEL;, который вернет false, если нажата клавиша возврата.

После этого просто оберните все внутри afterTextChanged() с if (thatBooleanVariable) { }.

...