edittext的监听事件

目前在开发过程中,遇见一个这样的需求,需要手动输入数据,获取到输入的数据之后,需要根据输入的内容进行请求,请求成功之后弹出一个列表,根据列表,选择然后显示到编辑框中,

本来以为只要添加一个

TextWatcher
监听就OK了,但是遇见了一个,选中之后,由于 edittext的内容又发生变化,导致弹框一直不停的出现,陷入一个循环。

/**产品名称的编辑的监听*/
mWatcher = new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
                                  int after) {

    }

    @Override
    public void afterTextChanged(final Editable s) {
        if (s == null || StringUtil.isEmpty(s.toString())) {
            return;
        }

        if (delayRun != null) {
            //每次editText有变化的时候,则移除上次发出的延迟线程
            handler.removeCallbacks(delayRun);
        }
        /**延迟线程,看是否还有下一个字符输入*/

        delayRun = new Runnable() {

            @Override
            public void run() {
                //在这里调用服务器的接口,获取数据

                getEveryProductListSecond("", "", s.toString() + "");

            }
        };
        //延迟800ms,如果不再输入字符,则执行该线程的run方法
        handler.postDelayed(delayRun, 800);

    }
};
editTextProductNameRight.addTextChangedListener(mWatcher);

解决办法: 在设置数据的时候,需要先将监听移除,在设置之后 再 进行添加.

猜你喜欢

转载自blog.csdn.net/weixin_37166398/article/details/80999545