Удаление TextChangedListener, а затем повторное добавление

Поэтому я пытался реализовать TextWatcher для Android и столкнулся с несколькими проблемами, когда TextChangedListener вызывался несколько раз или переходил в бесконечный цикл, поскольку я хочу преобразовать текст в виджет EditText в строку с отформатированной в валюте.

То, что я сделал, чтобы обойти это, было создание собственного пользовательского TextWatcher, а затем в событии afterTextChanged произошло следующее:

public class CurrencyTextWatcher implements TextWatcher { private EditText et; public CurrencyTextWatcher(EditText editText) { et = editText; } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { } public void afterTextChanged(Editable s) { et.removeTextChangedListener(this); et.setText(myCurrencyString); et.addTextChangedListener(this); } } 

Поэтому мой вопрос: есть ли лучший способ сделать это? Я хочу, чтобы один вид EditText Widget удерживал, куда идут изменения, и результирующая форматированная строка.

Также есть ли какие-либо другие проблемы, связанные с удалением, а затем добавлением TextChangedListener?

заранее спасибо

Каждый раз, когда вы обновляете (например, вызываете набор текста), ваш editText вызывается afterTextChanged, поэтому я думаю, что вы должны воздерживаться от вызова setText каждый раз, когда вы находитесь в afterTextChanged, и только вызывать его, когда что-то действительно меняется.

Так вот

 if ( !myCurrencyString.equals(et.getText())) { et.setText(myCurrencyString); } 

Как насчет следующего.

 private void resetAddTagField() { if (edtView != null && textWatcherListener != null) { edtView.removeTextChangedListener(textWatcherListener); edtView.setText(DEFAULT_TEXT); edtView.addTextChangedListener(textWatcherListener); } } 

Что я узнаю: не стоит недооценивать силу TextWatcher : D: D