2012-08-02 2 views
1

У меня проблема с моим приложением Сбой при рассылке поля EditText Как добавить задержку кода перед выполнением «DoSearch»?EditText Задержка прослушивателя перед повторным выполнением

Т.е., когда EditBox редактируется приложение придется поработать на холостом ходу 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(); 
    } 
}); 

EDIT: ок я решил проблему я определить Int SEARCHCOUNT как 0 Каждый раз, когда TextEdit изменяется это называется обработчик задержкиобработчик задержки выполнить только DoSearch на последней задержки вызова обработчика, проверяя, если 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); 
     } 
    } 
}; 

Существует место, чтобы улучшить этот метод? или это действительно эффективный способ?

ответ

-1

Добавить delayed Handler и каждый раз, когда onTextchanged называется удалять предыдущее сообщение от обработчика и продолжать публикацию с 1 секундой задержки. Если в течение одной секунды вызывается ontextChanged, то предыдущий Dosearch будет отменен

+0

Задержка работает, но она не отменяет других, и когда задержка завершена, спам doSearch снова ... или я использую его неправильно – Kirma

+0

Я не уверен, что вы подразумеваете под спамом. но если он сбой, вы можете вывести вывод logcat. – nandeesh

+0

Я решил проблему, есть место, чтобы улучшить этот метод? или это действительно эффективный способ? – Kirma

Смежные вопросы