EditText 自动搜索本地数据库(大数据量)卡顿解决方案
2016-03-01 18:42
471 查看
假设本地存了很多数据,按关键字搜索,而且要求自动搜索,没有搜索按钮,输入法上也没有,就要求这种体验,当你输入一个字符的时候,EditText的addTextChangedListener其实就开始监听了,比如你想搜索abc ,其实查询了三次数据库,先搜a,再ab,然后才是abc。这当然不合理,其实假设从网络拉取数据,这样也是不合理的。解决方案是加入Handler 来处理。代码如下:
searchInput.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable edit) { searchInput.requestFocus(); handler.removeMessages(TRIGGER_SERACH); if (!TextUtils.isEmpty(edit.toString()) { handler.sendEmptyMessageDelayed(TRIGGER_SERACH, 400); } });每次先remove消息,在延迟400ms发送消息,这样就可以大大优化了,连续输入造成的多次取数据库。然后在handler收消息的地方处理数据库或者网络请求的操作。代买如下:
Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub // super.handleMessage(msg); switch (msg.what) { case TRIGGER_SERACH: getSearchData(); break; } } };
相关文章推荐
- leetcode 每日一题 70. Climbing Stairs
- 【ZOJ3921 2016年浙大2月月赛I】【物理题 底乘高积分式思维】In the Rain 圆柱体人行走 吸收雨体积
- HDFS如何检测并删除多余副本块
- AIO
- nonatomic, retain,weak,strong用法详解
- Provisioning Profile -- 运行报错 Command /usr/bin/codesign failed with exit code 1
- mongodb启动不了:child process failed, exited with error number 100
- UVa 10245 The Closest Pair Problem 分治
- AIDL学习笔记
- SharePoint2010 Error:Failed to call GetTypes on assembly Microsoft.Office.InfoPath.Server解决方案
- Unix Study之--P5光盘安装AIX6.1全实录
- Salesforce开发工具之Metaforce - 全局元数据搜索
- Unix Study之--P5光盘安装AIX6.1全实录
- 简单明了的AIDL使用
- 【HDU 2457】 【POJ 3691】 DNA repair AC自动机+DP;
- tinyXML中FirstChild用法 http://blog.csdn.net/primer_programer/article/details/1968481
- HDU 5363 Key Set(2015 Multi-University Training Contest 6)
- 线程同步notify,notifyall,wait探究
- LeetCode第70题 Climbing Stairs
- AIDL