美文网首页首页投稿(暂停使用,暂停投稿)
当EditText输入最后一个字符时,再处理业务逻辑数据

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

作者: 抱歉我孤独成性视你如命i | 来源:发表于2016-11-19 00:51 被阅读148次

    最近项目中,增加了搜索功能,当用户输入内容时自动请求网络处理数据;我们首先想到的是对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方法中得到当前的时间并发送延迟消息

    long lastTime = 0, currentTime = 0;
    private final int REQUESTDATA = 1;
    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毫秒呢,这个不做辩论,自己处理就好。

    相关文章

      网友评论

        本文标题:当EditText输入最后一个字符时,再处理业务逻辑数据

        本文链接:https://www.haomeiwen.com/subject/lnfjpttx.html