日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TextWatcher

發(fā)布時間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TextWatcher 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關(guān)于EditText中的TextWatcher監(jiān)聽,有需要的朋友可以參考下。

功能: 1.監(jiān)聽EditText里輸入內(nèi)容的變化; 2.根據(jù)實時輸入的文字內(nèi)容,做出輸入自動提示效果 接口方法: 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); } }; 觸發(fā)過程:

1.beforeTextChanged(CharSequence s,int start,int count,int after); 在EditText里的內(nèi)容即將發(fā)生變化之前觸發(fā),EditText里的內(nèi)容變化有3種方式: 1.新增加字符;2.刪除字符;3.替換輸入框中的若干個字符。 該方法反映的是,EditText在要發(fā)生變化之前,原來的內(nèi)容字符串s有哪幾個字符將要發(fā)生何種變化。 無論何種變化方式,都可以理解為:輸入框的原內(nèi)容字符串s,從索引位置start開始, 有count個字符即將被替換,替換這count個字符的新的字符個數(shù)為after 注意:s是變化之前的輸入框內(nèi)容
2.onTextChanged(CharSequence s,int start,int before,int count); 在EditText里的內(nèi)容發(fā)生變化之時觸發(fā), 在變化時的新的字符串s里,從索引位置start開始,有count個字符,是替換了原來的before個字符的 注意:s是變化之后的輸入框內(nèi)容
3.afterTextChanged(Editable s) text變化之后觸發(fā),s是最終新的輸入框內(nèi)容
測試實例:
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 = 浙江
總結(jié): 1.判斷EditText里的內(nèi)容是否被刪除,如果beforeTextChanged里的after為0,則表示正在刪除字符 2.在afterTextChanged()方法里執(zhí)行后續(xù)的監(jiān)聽響應(yīng)操作 3.實現(xiàn)類似網(wǎng)頁輸入框中的自動提示功能 每次afterTextChanged()執(zhí)行之后,延遲300ms發(fā)送一個pending message去聯(lián)網(wǎng)查詢相關(guān)提示信息, 并且在每次發(fā)送查詢pending message之前,先remove掉原來的pending message。 如果用戶快速刪除輸入框里的內(nèi)容,到最后輸入框里為空,要記得remove掉之前的pending?message, 如果前面的某次pending message已經(jīng)執(zhí)行,則要記得清空查詢出來的自動提示信息。 用戶可能輸入很快,延時發(fā)送查詢消息,能盡可能減少聯(lián)網(wǎng)查詢的次數(shù),提高查詢效率。 4.聯(lián)想到CursorAdapter和ListView綁定時,當(dāng)數(shù)據(jù)庫內(nèi)容發(fā)生變化,ListView馬上刷新, 如果數(shù)據(jù)庫變化及其頻繁,會導(dǎo)致頻繁的刷新UI,可以考慮延時300ms左右發(fā)送一個消息, 將若干次數(shù)據(jù)的變化,只用一次刷新UI,提高性能。

總結(jié)

以上是生活随笔為你收集整理的TextWatcher的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。