Android EditText监测(TextWatcher)输入后延时500ms再搜索

来源:互联网 发布:java二叉树遍历相互求 编辑:程序博客网 时间:2024/05/19 03:46

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);



1 0
原创粉丝点击