删除TextChangedListener然后重新添加它

Jas*_*son 6 android textwatcher

所以我一直在尝试实现Android的TextWatcher并遇到一些问题,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);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,有更好的方法吗?我希望有一个EditText Widget来保存编辑所在的位置以及生成的格式化字符串.

实际上还有其他任何问题,有关删除然后添加像这样的TextChangedListener?

提前致谢

Jer*_*upé 5

每次你更新(例如调用 set text)你的 editText 时,afterTextChanged 都会被调用,所以我认为你应该避免每次在 afterTextChanged 中调用 setText 并且只在某些事情真正发生变化时调用它。

像这样

if ( !myCurrencyString.equals(et.getText()))
{
    et.setText(myCurrencyString);
}
Run Code Online (Sandbox Code Playgroud)