android edittext監聽輸入完成,輸入完成後,獲取到值
阿新 • • 發佈:2019-02-09
假如你要做這樣的一個功能,通過在編輯框輸入一些字元進行搜尋,輸入完成後,再顯示搜尋結果,在輸入的過程中,並不想一直通知伺服器來獲取資料。
假設這樣的一個場景,你想搜尋“1024”這個遊戲,那麼你肯定不想當輸入1 的時候,就和伺服器進行一次溝通吧,如果這樣對伺服器壓力太大了,你肯定希望的是當輸完1024後,再和伺服器進行互動,顯示出資料。
本部落格,就是監聽editText輸入完成後,然後再和伺服器進行互動,獲取資料,大大減小伺服器的壓力。
以下,就是具體的實現程式碼了:
private Handler handler = new Handler();
/**
* 延遲執行緒,看是否還有下一個字元輸入
*/
private Runnable delayRun = new Runnable() {
@Override
public void run() {
//在這裡呼叫伺服器的介面,獲取資料
getSearchResult(editString, "all", 1, "true");
}
};
search.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged (CharSequence s, int start, int before,
int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged (Editable s) {
if(delayRun!=null){
//每次editText有變化的時候,則移除上次發出的延遲執行緒
handler.removeCallbacks(delayRun);
}
editString = s.toString();
//延遲800ms,如果不再輸入字元,則執行該執行緒的run方法
handler.postDelayed(delayRun, 800);
}
});
上面,主要用到了兩點技術
1.
handler.postDelayed(delayRun, 800) 延遲800ms執行執行緒
2.
handler.removeCallbacks(delayRun); 移除當前MessageQueue裡面的待執行的執行緒