首页 > 代码库 > 多个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)溢出栈