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

本文介绍了如何使用TextWatcher监听EditText输入,并通过Handler实现500ms无变化后再执行搜索的策略,以提高搜索效率,避免频繁搜索导致的性能问题。详细讲述了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值