2012-08-02 70 views
1

我的應用程序出現問題 垃圾郵件發送EditText字段後崩潰 如何在執行「DoSearch」之前向代碼添加延遲?EditText監聽器延遲再次執行之前

即當編輯框被編輯的應用程序中有閒置的1秒,聽,如果它的編輯再次 如果屬實,如有虛假等待另一個秒 ,執行DoSearch

我希望你能理解我的處境

et = (EditText) findViewById(R.id.Searchfield); 
et.addTextChangedListener(new TextWatcher() { 
    public void afterTextChanged(Editable s) { } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     new DoSearch().execute(); 
    } 
}); 

編輯: 確定我解決了這個問題 我定義爲0 每次的文本編輯改變它被稱爲延遲處理INT SEARCHCOUNT延遲處理程序只有SEARCHCOUNT等於最後

et = (EditText) findViewById(R.id.SearchCoupon); 
et.addTextChangedListener(new TextWatcher() { 
    public void afterTextChanged(Editable s) { } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     searchCount++; 
     SearchHandler.sendMessageDelayed(SearchHandler.obtainMessage(searchCount), 1000); 
    } 
}); 


private Handler SearchHandler = new Handler() { 
    public void handleMessage(android.os.Message msg) { 
     if(msg.what == searchCount) { 
      new DoSearch().execute(); 
      System.out.println("Success" + searchCount + "=" + msg.what); 
     } 
     else { 
      System.out.println(msg.what + " - " + searchCount); 
     } 
    } 
}; 

還有就是要提高這個方法的地方在最後延遲處理程序調用執行DoSearch通過檢查?或者它實際上是一種有效的方式?

回答

-1

添加一個delayed Handler,並且每次調用onTextchanged時,都會從處理程序中刪除以前的消息並以1秒的延遲持續發佈。如果在一秒鐘內ontextChanged被調用,那麼以前的Dosearch將被取消

+0

延遲工作,但它不會取消其他人,當延遲結束時,再次搜索垃圾郵件......或者我使用它錯誤 – Kirma 2012-08-02 11:44:58

+0

我不確定垃圾郵件是什麼意思。但是如果它崩潰了,你可以發佈logcat輸出。 – nandeesh 2012-08-02 11:46:02

+0

我解決了這個問題,有一個地方可以改進這個方法嗎?或者它實際上是一種有效的方式? – Kirma 2012-08-02 12:08:07