#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:
-
Реализовать
android.text.TextWatcher
интерфейс -
Привязать прослушиватель:
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-й. Если мы не сохраним точное количество, в конце будут добавлены тире, как сумасшедшие.
Надеюсь, это поможет вам решить проблему.