2011-07-18 96 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

相關問題