目前在开发过程中,遇见一个这样的需求,需要手动输入数据,获取到输入的数据之后,需要根据输入的内容进行请求,请求成功之后弹出一个列表,根据列表,选择然后显示到编辑框中,
本来以为只要添加一个
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);
解决办法: 在设置数据的时候,需要先将监听移除,在设置之后 再 进行添加.