当EditText输入最后一个字符时,再处理业务逻辑

最近项目中,增加了搜索功能,当用户输入内容时自动请求网络处理数据;我们首先想到的是对EditText设置监听addTextChangedListener,然后在afterTextChanged方法中进行处理。

这样能实现功能,但是当用户输入abcd等单个字符内容时,就会执行好多次afterTextChanged方法,请求多次网络。如果说,一般输入的都是中文,比如输入“中央音乐学院”查找时,用户是一次性输入的,这样就不会请求多次网络,但是这时当用户想只查找“中央”两字时,把“音乐学院”四字删除,就会导致请求四次网络,虽然结果也是最后一次查找的结果,然而前三次的网络请求不是多余了吗,而且如果这四次网络请求出现了延迟等问题,可能导致最后显示的结果不是最后请求的数据。记录一下本次代码。


            @Override
            public void afterTextChanged(Editable s) {

                lastTime = System.currentTimeMillis();
                Message message = Message.obtain();
                message.obj = s.toString();
                message.what = REQUESTDATA;
                mHandler.sendMessageDelayed(message, 1000);
            }

在afterTextChanged方法中得到当前的时间并发送延迟消息


    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {

                case REQUESTDATA:

                    currentTime = System.currentTimeMillis();
                    String s = (String) msg.obj;

                    if (currentTime - lastTime >= 1000) {
                        LogPrint.logILsj(TAG, "大于--:");
                        //在此处处理
                    } else {
                        LogPrint.logILsj(TAG, "小于");
                    }
                    break;
            }
        }
    };

接收到消息后,判断当前的时间和最后一次输入字符的时间间隔,如果大于1000毫秒在处理数据,这时就是用户输入最后一个字符的请求。如果非要说用户输入的很慢,超过了1000毫秒呢,这个不做辩论,自己处理就好。

本篇博文为原创,来自于vitamio,转载请注明出处。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值