所以我一直在尝试为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);
}
}
所以我的问题是,有更好的方法吗?我希望有一个EditText小部件来保存编辑所在的位置以及生成的格式化字符串。
实际上是否还有其他问题需要删除,然后添加像这样的TextChangedListener?
提前致谢
答案 0 :(得分:3)
每当你更新(通过调用set text)你的editText时,都会调用afterTextChanged,所以我认为你应该在每次进入afterTextChanged时都不要调用setText,只有在真正改变时才调用它。
像这样if ( !myCurrencyString.equals(et.getText()))
{
et.setText(myCurrencyString);
}
答案 1 :(得分:0)
如何关注。
private void resetAddTagField() {
if (edtView != null && textWatcherListener != null) {
edtView.removeTextChangedListener(textWatcherListener);
edtView.setText(DEFAULT_TEXT);
edtView.addTextChangedListener(textWatcherListener);
}
}
我学到的东西:不要低估 TextWatcher 的力量:D:D