您的位置:首页 > 大数据

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;

}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: