2016-12-09 57 views
0

我想每次更新值EditText 3秒後調用Web服務,但如果您在3秒前更新EditText的值,請刪除所有延遲的回調,並等待3秒爲Web服務call.Please看我的鱈魚,讓我知道適當的方式來完成這項任務取消postDelayed內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 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); 
}