2011-07-18 189 views
6

所以我一直在尝试实现Android的TextWatcher,并遇到一些问题与多次调用TextChangedListener或进入无限循环,因为我想转换文本EditText小部件转换为货币格式的字符串。删除TextChangedListener然后重新添加它

我做了什么来解决,这是创建自己的自定义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像这样?

在此先感谢

回答

3

每次(主叫组文本例如通过),你会更新EDITTEXT的afterTextChanged将被调用,所以我觉得你应该打电话的setText每次在afterTextChanged,只把它当时间不要有些事情真的在改变。

某事像这样

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

啊,完美..不能相信我没有想到这一点。谢谢 – Jason

0

如何以下。

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

     edtView.addTextChangedListener(textWatcherListener); 
    } 
} 

我学到什么:不要低估TextWatcher功率:d:d

相关问题