zoukankan      html  css  js  c++  java
  • 监听EditText输入完成

    最近有个需求,要在用户输入完快递单号之后,请求快递100接口,拿到快递公司信息。总不能用户输入一个数字就请求一次吧,给服务器造成不必要的压力(虽然不是自家服务器)。但是又无法知晓用户何时输入完毕,每家快递公司单号的长度都不一。

    So,在用户500ms(时长可以自己定)没有输入内容时请求接口。

     1         et_express_code.addTextChangedListener(new TextWatcher() {
     2             @Override
     3             public void beforeTextChanged(CharSequence s, int start, int count, int after) {
     4 
     5             }
     6 
     7             @Override
     8             public void onTextChanged(CharSequence s, int start, int before, int count) {
     9 
    10             }
    11 
    12             @Override
    13             public void afterTextChanged(Editable s) {
    14                 if(delayRun!=null){
    15                     //每次editText有变化的时候,则移除上次发出的延迟线程
    16                     handler.removeCallbacks(delayRun);
    17                 }
    18                 editExpressNum = s.toString();
    19                 //延迟500ms,如果不再输入字符,则执行该线程的run方法
    20                 handler.postDelayed(delayRun, 500);
    21             }
    22         });
     1     /**
     2      * 延迟线程,看是否还有下一个字符输入
     3      */
     4     private Runnable delayRun = new Runnable() {
     5 
     6         @Override
     7         public void run() {
     8             if (!NullUtil.isListEmpty(expressList)) {
     9                 //请求服务器接口
    10             }
    11         }
    12     };

    主要是以上两点:

    1、延迟500ms执行请求接口的任务;

    2、用户输入内容时,此任务若存在则移除当前MessageQueue里待执行的线程。

      BY LiYing

  • 相关阅读:
    面试问题记录
    面试问题记录
    面试问题记录
    JavaScript => ?
    Jsr303数据校验
    在浏览器上开发GO和Vue!(基于code-server)
    IdentityServer4 4.0.0
    9/13-9/18
    9/6-9/10
    8/30-9/3
  • 原文地址:https://www.cnblogs.com/widgetbox/p/8409529.html
Copyright © 2011-2022 走看看