最近项目中有个需求,更改标题判断输入结束调用API更改标题。开始直接设置的TextWatcher,然后在afterTextChanged
事件里调用API更改标题,然后发现每输入一个字都会调用一次API并提示操作成功,体验十分不好。
后面尝试了多种方法后用handler.postDelayed解决问题
新建一个 Runnable
private Runnable delayRunnable = new Runnable() { @Override public void run() { updateName(title); } };
然后在Editext的TextWatcher中的onTextChanged方法里判断Runnable若不为空就移除,在afterTextChanged中延迟启动Runnable
private TextWatcher watcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if(delayRun!=null){ handler.removeCallbacks(delayRun); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { handler.postDelayed(delayRun, 2000); } };
0.0