У меня есть textwatcher в нескольких блоках editText, которые принимают вычисления и выводят результат в Textview. Тем не менее, мне также нужен способ использования DecimalFormat, чтобы после того, как пользователь ввел его в editText, он форматирует его так: «$ ###, ###, ###. 00». Я думал об использовании OnFocusChangedListener, но похоже, что он все равно вызовет событие afterTextChanged. Как мне это сделать, чтобы в итоге не было переполнения стека?AfterTextChanged и OnFocusChangedListener
textwatcher вызывает метод как это:
TextWatcher Watch = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
calc();
}
private void calc() {
Editable eValue1 = new.getText(), eValue2 = ti.getText(), eValue3 = acc.getText();
Double value1 = 0.0, value2 = 0.0, value3 = 0.0, result = 0.0;
if (eValue1 != null)
value1 = toDouble(eValue1);
if (eValue2 != null)
value2 = toDouble(eValue2);
if (eValue3 != null)
value3 = toDouble(eValue3);
if (value1 != null && value2 != null && value3 != null)
result = value1 - (value2 + value3);
td.setText(formatCur(result));
}
private String formatCur(Double result) {
DecimalFormat df = new DecimalFormat("$###,###,###.00");
String format = df.format(result);
return format;
}
Не уверен, что это сработает. Слушатели используются для динамического вывода вычислений без необходимости «вычисления». Я отправил код выше, если у вас есть идеи. –
Просто добавьте private boolean _textModifiedByWatcher = false; который вы установили в true после изменения текста в наблюдателе. В afterTextChanged вы проверяете, является ли _textModifiedByWatcher истинным. Если это так, вы устанавливаете значение false и немедленно возвращаетесь. –
Я пробовал это, но что-то не так хорошо работает. Не могли бы вы добавить простой пример? Я новичок в Android и Java. –