Проблема с удалением afterTextChanged

#android #android-edittext #textchanged

#Android #android-редактировать текст #текст изменен

Вопрос:

Я попытался настроить это так, чтобы, когда я вводил что-либо в поле EditText, это изменяло цвет текста и устанавливало переменную в значение введенных чисел. Однако, когда я удаляю символы из поля, это вызывает ошибку, которая закрывает приложение. Я думаю, мне может понадобиться либо найти оператор if, который не зависит от длины, либо, возможно, использовать некоторые другие методы (onTextChanged, beforeTextChanged… Хотя я действительно не знаю, как правильно использовать любой из них)

     public void afterTextChanged(Editable arg0) {
    if(arg0.length()>0){
        ageTag.setTextColor(Color.GREEN);
        ageEntered=true;
        ageInYears=Integer.parseInt(enterAge.getText().toString()); 
    }
}
  

Ответ №1:

  1. Реализовать android.text.TextWatcher интерфейс

  2. Привязать прослушиватель:

enterAge.addTextChangedListener(this);

Комментарии:

1. это было ранее в моем коде… Ввод — это редактируемый текст, для которого установлен прослушиватель. ageTag — это TextView, введенный возраст — это логический флаг, а ageInYears — это целое число, проанализированное из строки чисел, введенной в EnterAge итак, enterAge.addTextChangedListener(this); и вверху у меня есть открытый класс calculator extends … бла-бла-бла … снова реализует TextWatcher{… проблема, с которой я сталкиваюсь, заключается в том, что обработчик событий выполняет что-то afterTextChanged, и он пытается выполнить эти действия без текста, когда я удаляю, чтобы очистить поле.

Ответ №2:

У меня была похожая проблема. Мне пришлось добавить «-» после 5-го символа, 11-го и т.д. Когда я хотел удалить «-«, он игнорировал клавишу удаления, поэтому я сделал следующее.

Созданы две переменные: beforeCharCounter и charCounter, и в onTextChanged я установил их значения на before и count.

 activationKeyEditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            beforeCharCounter = before;
            charCounter = count;
            System.out.println(count);
        }

        @Override
        public void afterTextChanged(Editable s) {
            if ((s.length() == 5 amp;amp; beforeCharCounter <= 5 amp;amp; charCounter == 5) ||
                    (s.length() == 11 amp;amp; beforeCharCounter <= 11 amp;amp; charCounter == 11)
                    || (s.length() == 17 amp;amp; beforeCharCounter <= 17 amp;amp; charCounter == 17)) {
                s.append('-');
            }
        }
    });
  

если значение before больше, чем длина, то наверняка это delete, и это решит проблему с удалением. Подсчет используется, когда пользователь ввел 10 символов и нажимает на 5-й. Если мы не сохраним точное количество, в конце будут добавлены тире, как сумасшедшие.

Надеюсь, это поможет вам решить проблему.