首页投稿(暂停使用,暂停投稿)

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

2016-11-19  本文已影响148人  抱歉我孤独成性视你如命i

最近项目中,增加了搜索功能,当用户输入内容时自动请求网络处理数据;我们首先想到的是对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毫秒呢,这个不做辩论,自己处理就好。

上一篇下一篇

猜你喜欢

热点阅读