EditText即时搜索,可限定时间工具类
来源:互联网 发布:js修改div背景颜色 编辑:程序博客网 时间:2024/05/01 01:17
想必即时搜索大家都做过,一般都监听EditText字符串改变或者SearchView来实现。但有时候,我们不想让它
输入一个字符就请求一次,删除一个字符也请求一次,那样太频繁了那有什么好方法可以实现让它输入后过一秒(或
者自定义时间)再搜索吗?下面这个工具类可以帮到你。
public class RealTimeSearchUtil { private static ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(10); private static RealTimeSearchUtilLisetener mRealTimeSearchUtilLisetener; private static MyHandler handler = new MyHandler(); /** * 实时搜索数据,通过RealTimeSearchUtilLisetener接口操作 * @param newText 搜索的字符串 * @param time 过多久搜索 * @param realTimeSearchUtilLisetener */ public static void sendRealTimeSearchMessage(String newText,int time, RealTimeSearchUtilLisetener realTimeSearchUtilLisetener){ showSearchTip(newText,time); mRealTimeSearchUtilLisetener = realTimeSearchUtilLisetener; } public static void showSearchTip(String newText,int time) { schedule(new SearchTipThread(newText), time); } public static ScheduledFuture<?> schedule(Runnable command, long delayTimeMills) { return scheduledExecutor.schedule(command, delayTimeMills, TimeUnit.MILLISECONDS); } private static class SearchTipThread implements Runnable { String newText; protected SearchTipThread(String newText) { this.newText = newText; } @Override public void run() { // keep only one thread to load current search tip, you can get data from network here boolean flag = newText != null && newText.length() > 0; if (flag) { handler.sendMessage(handler.obtainMessage(1));//不能在子线程中在开启一个子线程 } } } private static class MyHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: mRealTimeSearchUtilLisetener.handleUIMessage(); break; } } } public interface RealTimeSearchUtilLisetener{ /** * 此方法在主线程中执行,可以发送网络请求数据 */ void handleUIMessage(); }}
如何使用?
etSearch.addTextChangedListener(textWatcher);
public TextWatcher textWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(final CharSequence s, int start, int before, int count) { RealTimeSearchUtil.sendRealTimeSearchMessage(s.toString(),500, new RealTimeSearchUtil.RealTimeSearchUtilLisetener() { @Override public void handleUIMessage() { //发起请求 } }); } @Override public void afterTextChanged(Editable s) { } };
欢迎Star,Thank You Github: https://github.com/LxzBUG/LimitedTimeSearchUtils
0 0
- EditText即时搜索,可限定时间工具类
- 可输入表情EditText工具类
- 即时搜索
- 限定EditText小数位数
- 限定 edittext 的 输入内容
- 支付宝即时交易,日期工具类
- 即时搜索的方案
- 即时通信工具
- edittext限定其输入的内容
- EditText 输入值限定最小值和最大值
- String限定类型的HashMap以及一个String工具类
- 百度一下即时搜索效果
- DropEditText可拉伸EditText
- 限定时间的荣誉奖励
- 限定线程的运行时间
- 搜索框即时搜索的实现
- 简单实现搜索框 即时搜索
- Android EditText框输入清理工具类
- 有向强连通图的Tarjan算法
- Eclipse luna Subversive(SVN) 的安装----note
- Eclipse常用插件
- 递归算法----Catalan数----笨笨连线游戏
- List<Map<String, Object>>
- EditText即时搜索,可限定时间工具类
- Linux学习---shell编程(13-for语句)
- JDBC中日期时间的处理技巧
- C++ Primer Plus (Six Edition) Chapter 2, Programming Exercises
- 渲染世界的OpenGL<6>基础变换
- JS 移除数组中指定索引项
- CaysnPrinter开发包接口说明文档及示例程序 - CAYSN IOS SDK_20160906
- Linux学习---shell编程(14-while语句)
- string->WCHAR*