android - edittext - textwatcher用法




Android TextWatcher.afterTextChanged vs TextWatcher.onTextChanged (2)

Android Textwatcher是一種被稱為輸入字段文本更改的觸發器。

Text Watcher有三個事件。

afterTextChanged (Editable s) - 此方法在文本被更改時調用。 由於您所做的任何更改都會導致此方法以遞歸方式被再次調用,因此您必須謹慎執行此處的操作,否則可能會導致無限循環

beforeTextChanged (CharSequence s, int start, int count, int after) - 調用此方法通知您,在s中,從開始處開始的計數字符即將被長度為後的新文本替換。 嘗試從此回調中更改s是錯誤的。

onTextChanged (CharSequence s, int start, int before, int count) - 調用此方法以通知您,在s中,從開始處開始的計數字符剛剛替換了之前具有長度的舊文本。 嘗試從此回調中更改s是錯誤的。

為獲得更好的信息,您可以訪問這裡

http://developer.android.com/reference/android/text/TextWatcher.html

在什麼情況下我應該使用afterTextChanged而不是onTextChanged ,反之亦然? 示例將最有啟發性,注意為什麼onTextChanged必須被afterTextChanged ,但afterTextChangedbeforeTextChanged不必被afterTextChanged


public void afterTextChanged(可編輯的)

這個方法被調用來通知你,在s某個地方,文本已經被改變了。 從這個回調中對s進行進一步修改是合理的,但要小心不要讓自己陷入無限循環,因為您所做的任何更改都會導致此方法被遞歸調用。 (你沒有被告知發生了什麼變化,因為其他的afterTextChanged()方法可能已經做了其他的更改並且使得偏移無效。但是如果你需要知道這裡,你可以在setSpan(Object, int, int, int)中使用setSpan(Object, int, int, int) onTextChanged(CharSequence, int, int, int)來標記你的位置,然後從這裡查找跨度結束的位置。

public void beforeTextChanged(CharSequence s,int start,int count,int after)

調用此方法是為了通知您,在s ,從開始處startcount字符即將被長度為after新文本替換。 嘗試從此回調中更改s是錯誤的。

public void onTextChanged(CharSequence s,int start,int before,int count)

調用此方法是為了通知您,在s ,從開始處startcount字符剛剛替換了before有長度的舊文本。 嘗試從此回調中更改s是錯誤的。

來自Android的TextWatcher參考





android-textwatcher