預想方案:
通過Handle設置300毫秒延時,如果監聽到下一次輸入距離上一次輸入的時間少於300毫秒,就在afterTextChanged 方法中remove掉延時器,如果在300毫秒之外就代表輸入完畢
具體代碼如下
Handler handler = new Handler();
Runnable runnable;
etInput.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) {
}
@Override
public void afterTextChanged(final Editable s) {
//如果在300毫秒之內又輸入了,就會再次返回,然後就再次remove掉了上次
//如果300毫秒內不輸入了,就不會執行remove了,就直接跳轉了
//原理:每次都執行跳轉流程,但是有個條件,下一次不會返回的情況下,下次一旦返回就把上次的跳轉操作取消了
if (runnable != null) {
handler.removeCallbacks(runnable);
Log.v("tag", "---" + s.toString());
}
runnable = new Runnable() {
@Override
public void run() {
Log.v("tag", "跳轉======" + s.toString());
}
};
Log.v("tag", "(((((" + s.toString());
handler.postDelayed(runnable, 300);
}
});