Каждый раз, когда вы звоните setText()
, даже если фактический текст не отличается, это будет считаться событием «текст изменен».Это означает, что эта строка является виновником:
et_product_price.setText(formatted);
Когда вы звоните в первый раз, это вызовет событие изменения текста, так что ваш подписчик будет вызван снова.Он проанализирует и отформатирует дубль, а затем снова вызовет setText()
.И так далее.
Есть много способов решить эту проблему, но в основном вам просто нужно убедиться, что вы не вызываете setText()
, если «новое» значение равно «старому» значению.
if (!formatted.equals(et_product_price.getText().toString()) {
et_product_price.setText(formatted);
}