码迷,mamicode.com
首页 > 其他好文 > 详细

多个EditText 监听矛盾的 解决办法 (Overstack)溢出栈

时间:2016-08-29 17:23:45      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

这里有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)溢出栈

标签:

原文地址:http://www.cnblogs.com/lws520/p/5818456.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!