2016-12-09 2 views
0

Я хочу, чтобы веб-служба вызывалась через 3 секунды каждый раз, когда вы обновляете значение EditText, но в случае, если вы обновите значение EditText до 3 секунд, удалите все задержанные обратные вызовы и подождите 3 секунды для веб-службы звоните. Пожалуйста, см. мою треску и дайте мне знать, как правильно выполнить эту задачу.Отмена postDelayed in onTextChanged

@Override 
public void onTextChanged(final CharSequence s, int start, int before, int count) { 

    if (s.length() > 2) { 

     final Handler handler = new Handler(); 
     handler.removeCallbacksAndMessages(null); 
     handler.postDelayed(
       new Runnable() { 
        @Override 
        public void run() { 

         // Soap call 

        } 
       }, 
       3000); 
    } 
} 
+0

Можете ли вы объявить обработчик обработчика «final handler = new Handler();» вне этой области, так что он всегда должен указывать на один обработчик и удалять ожидающие и сбросить. – Vinodh

+0

создать обработчик переменной-члена и использовать handler.removeCallbacksAndMessages. –

ответ

0

Попробуйте этот код

Это решит проблему.

final Handler handler = new Handler(); 
    final Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 

      //Soap Call; 
     } 
    }; 

    editText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 


     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

      handler.removeCallbacks(runnable); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

      handler.postDelayed(runnable, 3000); 

     } 
    }); 
+0

Спасибо, он отлично работает –

+0

удовольствие все мое –

0

Попробуйте это.

long lastTime = System.currentTimeMillis(); 
final Handler handler; 
public void onTextChanged(final CharSequence s, int start, int before, int count) { 
    if(s.length() > 2) { 
     if (System.currentTimeMillis() - lastTime > 3000) { 
      startWork(); 
     } 
     lastTime = System.currentTimeMillis(); 
    } 
} 

public void startWork() { 
    if (null == handler) { 
     handler = new Handler(); 
    } 
    handler.removeCallbacksAndMessages(null); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      //Soap call 
     } 
    }, 3000); 
} 
Смежные вопросы