1. 程式人生 > >android edittext監聽輸入完成,輸入完成後,獲取到值

android edittext監聽輸入完成,輸入完成後,獲取到值

假如你要做這樣的一個功能,通過在編輯框輸入一些字元進行搜尋,輸入完成後,再顯示搜尋結果,在輸入的過程中,並不想一直通知伺服器來獲取資料。

假設這樣的一個場景,你想搜尋“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裡面的待執行的執行緒