2013-01-06 72 views
0

時,當我設置一個TextWatcher到的EditText像安卓:結合的EditText

editText1.addTextChangedListener(watcher); 

其方法 public void onTextChanged(CharSequence s, int start, int count, int after)afterTextChanged and beforeTextChanged火,如果有的EditText文本或不不管TextWatcher.onTextChanged火災。 我會認爲這些方法僅在綁定後發生文本更改後纔會調用。我怎樣才能做到這一點,或者我的邏輯有什麼問題?

感謝

編輯:

我的setText()addTextChangedListener之前。

調用堆棧:

DalvikVM [本地主機:8600]
螺紋[< 1>主](暫停)

的EditText(TextView的).sendOnTextChanged(CharSequence的,INT,INT,INT)線: 7875
的EditText(TextView的).setText(CharSequence中,TextView的$ BufferType,布爾,INT)線:3488
的EditText(TextView的).setText(CharSequence中,TextView的$ BufferType)線:3341
EditText.setText(CharSequence的,TextView的$ BufferTyp e)項:90
的EditText(TextView的).setText(CharSequence的)線:3316 的EditText(TextView的).onRestoreInstanceState(Parcelable)線:3216
的EditText(查看).dispatchRestoreInstanceState(SparseArray)線:10079
..

回答

1

只要撥打addTextChangedListener(TextWatcher)就不會觸發這些方法。可能你只是調用setText()或以其他方式編程修改文本。


這是android.widget.TextView.addTextChangedListener源代碼:addTextChangedListener之前

public void addTextChangedListener(TextWatcher watcher) { 
    if (mListeners == null) { 
     mListeners = new ArrayList<TextWatcher>(); 
    } 
    mListeners.add(watcher); 
} 
+0

我的setText()。這有問題嗎? – user1324936

+0

之前?它不應該是......如果你刪除該行,它仍然被稱爲?這只是爲了解決'TextWatcher'的原因。如果你找不到原因,可以在完成UI的設置後設置一個布爾標誌,而最初只是從'TextWatcher'的方法返回時返回false。 也許你正在恢復狀態或'addTextChangedListener'後的東西? –

+0

我只在我的onCreate方法setTxt。如果我不設置它沒有任何反應!我有一個ViewPager。只有當我滾動回到先前加載的頁面時,問題纔會發生。我將TextWatcher設置爲null,然後在片段重新加載時創建一個新的。我檢查了舊的在onCreateView之前被刪除。 – user1324936