TextWatcher
生活随笔
收集整理的這篇文章主要介紹了
TextWatcher
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于EditText中的TextWatcher監聽,有需要的朋友可以參考下。
功能: 1.監聽EditText里輸入內容的變化; 2.根據實時輸入的文字內容,做出輸入自動提示效果 接口方法: TextWatcher myWatcher = newTextWatcher(){@Override public void onTextChanged(CharSequence s,int start,int before,int count){System.out.println("onTextChanged");System.out.println("s = "+s+",start = "+start+",before = "+before+",count = "+count); }@Override public void beforeTextChanged(CharSequence s,int start,int count,int after){System.out.println("beforeTextChanged");System.out.println("s = "+s+",start = "+start+",count = "+count+",after = "+after); }@Override public void afterTextChanged(Editable s){System.out.println("afterTextChanged");System.out.println("s = " + s); } }; 觸發過程:1.beforeTextChanged(CharSequence s,int start,int count,int after); 在EditText里的內容即將發生變化之前觸發,EditText里的內容變化有3種方式: 1.新增加字符;2.刪除字符;3.替換輸入框中的若干個字符。 該方法反映的是,EditText在要發生變化之前,原來的內容字符串s有哪幾個字符將要發生何種變化。 無論何種變化方式,都可以理解為:輸入框的原內容字符串s,從索引位置start開始, 有count個字符即將被替換,替換這count個字符的新的字符個數為after 注意:s是變化之前的輸入框內容
2.onTextChanged(CharSequence s,int start,int before,int count); 在EditText里的內容發生變化之時觸發, 在變化時的新的字符串s里,從索引位置start開始,有count個字符,是替換了原來的before個字符的 注意:s是變化之后的輸入框內容
3.afterTextChanged(Editable s) text變化之后觸發,s是最終新的輸入框內容
測試實例:
1.先輸入字符串“漢口” beforeTextChanged s = ,start = 0,count = 0,after = 2 onTextChanged s = 漢口,start = 0,before = 0,count = 2 afterTextChanged s = 漢口
2.再輸入字符串“天門” beforeTextChanged s = 漢口,start = 2,count = 0,after = 2 onTextChanged s = 漢口天門,start = 2,before = 0,count = 2 afterTextChanged s = 漢口天門
3.刪除字符“門” beforeTextChanged s = 漢口天門,start = 3,count = 1,after = 0 onTextChanged s = 漢口天,start = 3,before = 1,count = 0 afterTextChanged s = 漢口天
4.刪除“漢口” beforeTextChanged s = 漢口天,start = 0,count = 2,after = 0 onTextChanged s = 天,start = 0,before = 2,count = 0 afterTextChanged s = 天
5.用“浙江”替換“天” beforeTextChanged s = 天,start = 0,count = 1,after = 2 onTextChanged s = 浙江,start = 0,before = 1,count = 2 afterTextChanged s = 浙江
總結: 1.判斷EditText里的內容是否被刪除,如果beforeTextChanged里的after為0,則表示正在刪除字符 2.在afterTextChanged()方法里執行后續的監聽響應操作 3.實現類似網頁輸入框中的自動提示功能 每次afterTextChanged()執行之后,延遲300ms發送一個pending message去聯網查詢相關提示信息, 并且在每次發送查詢pending message之前,先remove掉原來的pending message。 如果用戶快速刪除輸入框里的內容,到最后輸入框里為空,要記得remove掉之前的pending?message, 如果前面的某次pending message已經執行,則要記得清空查詢出來的自動提示信息。 用戶可能輸入很快,延時發送查詢消息,能盡可能減少聯網查詢的次數,提高查詢效率。 4.聯想到CursorAdapter和ListView綁定時,當數據庫內容發生變化,ListView馬上刷新, 如果數據庫變化及其頻繁,會導致頻繁的刷新UI,可以考慮延時300ms左右發送一個消息, 將若干次數據的變化,只用一次刷新UI,提高性能。
總結
以上是生活随笔為你收集整理的TextWatcher的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab晶闸管不能连接,基于MATL
- 下一篇: 工作314:uni-提交成功加入表单验证