【问题标题】:Infinite loop error EditText无限循环错误EditText
【发布时间】:2013-04-27 23:01:56
【问题描述】:

首先看我的代码:

这些在我的活动中;

EditText text1,text2; (Are defined corretly not problem)
text1.addTextChangedListener(new MyTextWatcher(onePercent));
text2.addTextChangedListener(new MyTextWatcher(twoPercent));
..                                   ..
..                                   ..
..                                   ..
private class MyTextWatcher implements TextWatcher {

    private View view; 

    private MyTextWatcher(View view) {
        this.view = view; 

    }

    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2)         {}
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) 
    {}


    public void afterTextChanged(Editable editable) {


        String text = editable.toString();
        switch(view.getId()){

        case R.id.dis_one_percent: (this is text1)
            if(!text.equel(""))             
               text2.setText(Double.toString(text));            

            break;
        case R.id.dis_one_number: (and text2)
            if(!text.equel(""))            
            text1.setText(Double.toString(text+"LOL"));                  


    }



    }
}

目标:当用户在 text1 区域输入一些值时,我想触发 text2 区域。但是当用户在 text1 区域输入值时,会触发 text2 的 MyTextWatcher。有一个无限循环。我该如何解决这个问题?

【问题讨论】:

  • 只是好奇...text.equel("") 不是给你一个编译错误吗?
  • 我不是复制/粘贴我的代码。再写一遍。 (:

标签: android android-edittext textwatcher


【解决方案1】:

更改文本时需要移除文本更改监听器。

public void afterTextChanged(Editable editable) {
     text1.removeTextChangedListener(onePercent);
     text2.removeTextChangedListener(twoPercent);
    String text = editable.toString();
    switch(view.getId()){

    case R.id.dis_one_percent: (this is text1)
        if(!text.equel(""))             
           text2.setText(Double.toString(text));            

        break;
    case R.id.dis_one_number: (and text2)
        if(!text.equel(""))            
        text1.setText(Double.toString(text+"LOL"));                  
   }
   text1.addTextChangedListener(new MyTextWatcher(onePercent));
   text2.addTextChangedListener(new MyTextWatcher(twoPercent));

}

【讨论】:

  • 您必须同时删除 text1 和 text2 然后再添加。您稍后发布的两个编辑文本,所以我以为您只有一个编辑文本。
  • 这个想法完全可行。即使它比接受的答案更好,因为不依赖于focus
【解决方案2】:

我解决了我的问题。那真的很简单。 (:

只需检查 setText() 之前的 isFocused();

case R.id.dis_one_percent: (this is text1)
        if(!text.equals("")) 
        {            
          if( text1.isFocused())
             text2.setText(Double.toString(text));      
        }      

        break;
    case R.id.dis_one_number: (and text2)
        if(!text.equals(""))   
        {    
            if( text2.isFocused())     
               text1.setText(Double.toString(text+"LOL")); 
        }

对不起,耽误您的时间。并感谢您的回复...

【讨论】:

  • +1。太棒了,刚刚拯救了我的一天!尽管看起来很简单,但我正在努力解决这个问题,因为我在文本字段之间设置/取消设置标签,它变得非常复杂,而且它并没有真正起作用..
  • 您还可以在焦点更改时添加/删除更改侦听器,这就是我所做的,但您的解决方案为我指明了正确的方向:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2014-01-24
相关资源
最近更新 更多