预想方案:
通过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);
}
});