TextWatcher用于监测文字的变化,即时搜索在很多场景下都有使用。但是当搜索量很大时,短时间内输入很多的字母时,由于每改变一个字母就要去搜索搜索速度会大大下降。那该怎么办呢?这里的解决方案就是但用户输入完成时再去执行搜索,比如500ms内文字没有改变,则判断为用户输入完成,否则取消执行搜索。下面是使用Message、Handler具体的实现代码:
TextWatcher watcher = new TextWatcher() { @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub String ss = s.toString().replace(" ",""); Edit_str =ss;
if(myHandler3.hasMessages(MSG_MYSEARCH)){ myHandler3.removeMessages(MSG_MYSEARCH); } Message msg3 = new Message(); msg3.what = MSG_MYSEARCH; /*if(Edit_str.length()<=1) myHandler3.sendMessage(msg3); else*/ myHandler3.sendMessageDelayed(msg3,500); } };
class MyHandler3 extends Handler { @Override public void handleMessage(Message msg3) { try { super.handleMessage(msg3); } catch (Exception e) { e.printStackTrace(); } switch (msg3.what) { case MSG_MYSEARCH://添加要执行的内容 //search_task = new SearchTask(MainActivity.this, Edit_str); //search_task.execute(); //viewPager.getAdapter().notifyDataSetChanged(); break; default: break; } } }search_edit.addTextChangedListener(watcher);