首页 > 代码库 > 多个EditText 监听矛盾的 解决办法 (Overstack)溢出栈
多个EditText 监听矛盾的 解决办法 (Overstack)溢出栈
这里有A,B,C 三个edittext,他们三个之间通过后台的计算来改变互相的值。具体来说,A在变得时候,BC会随之而变;B在变得时候AC会随之而变。因此,一开始我给他们三个都分别添加textChangedListener的时候就出现的StackOver 栈溢出的问题。原因是他们进入了死循环!!
解决办法:
自认为很简单的方法,以后不管是editText还是什么控件,出现类似的死循环问题都可以用这个方法解决:
设立一个flag!!
首先默认该flag=false;
Then at each editText, we set an addtextChangedListener:
In this Listener, we should implement three functions, here I just use one function:
红色的代码表示的是该flag的用法。当autochange为true的时候它会阻止edittext使用监听器,当它为false的时候,监听器才能继续进行。
a.addTextChangedListener(new TextWatcher (){ @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub if(autochange){ autochange=false; return; } else{ if(s.length()!=0){ double edeg = Double.parseDouble(d.getText().toString()); double width = Double.parseDouble(String.valueOf(s)); ArrayList<Double> list = computeTL2(width,edeg); autochange=true; e.setText(list.get(2)+" "); f.setText(list.get(3)+" "); b.setText(list.get(0)+" "); c.setText(list.get(1)+" "); } } } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } });
多个EditText 监听矛盾的 解决办法 (Overstack)溢出栈
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。