首页 > 其他 > 详细

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

时间:2016-08-29 17:21:19      阅读:225      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!