EditText 自动搜索本地数据库(大数据量)卡顿解决方案

 

假设本地存了很多数据,按关键字搜索,而且要求自动搜索,没有搜索按钮,输入法上也没有,就要求这种体验,当你输入一个字符的时候,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;
		

			
			
			}
		}
	};




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值