2012-03-20 63 views
4

这真的很奇怪,昨天我问了Yesterdays question如何实现多个editText监听器以避免重复我的代码。我慷慨地提供了一个答案(我发誓我尝试了),但今天我没有得到它的任何地方。我正在尝试执行以下操作,但在尝试安装Tw Textwatcher时遇到了Cannot instantiate the type TextWatcher错误。Android多EditText与OnTextChangedListener

**TextWatcher tw = new TextWatcher();** 

intTextValue.addTextChangedListener(tw); 

任何帮助将不胜感激。它开始让我有点疯狂。

最终我试图去到以下的情况(这应该是简单的权利??)。

public class myClass extends Activity implements OnFocusChangeListener, TextWatcher { 
private EditText et; 
private EditText et1; 
private EditText et2; 
private int whoHasFocus= 0; 

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout1); 


     et = (EditText)findViewById(R.id.et); 
     et.setOnFocusChangeListener(this); 
     et.addTextChangedListener(tw); 

     et1 = (EditText)findViewById(R.id.et); 
     et1.setOnFocusChangeListener(this); 
     et1.addTextChangedListener(tw); 

     et2 = (EditText)findViewById(R.id.et); 
     et2.setOnFocusChangeListener(this); 
     et2.addTextChangedListener(tw); 

} 

     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 

      switch (v.getId()) { 
      case R.id.et: 
       whoHasFocus =1; 
       break; 
      case R.id.et1: 
       whoHasFocus =2; 
       break; 
      case R.id.et2: 
       whoHasFocus=3; 
       break;    
      } 


     } 

    @Override 
    public void afterTextChanged(Editable s) { 
     switch (whoHasFocus) { 
      case 1: 
       //do code 
       break; 
      case 2: 
       //do code 
       break; 
      case 3: 
       //do code 
       break;    
      } 

    } 

    @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 

    } 

} 

回答

4

你不需要TextWatcher实例,只是用 “这个”

et.addTextChangedListener(this); 
et1.addTextChangedListener(this); 
et2.addTextChangedListener(this); 
+0

这真的很奇怪,为什么早些时候没有为我工作!哦,也许是树木的情况。非常感谢您的及时回复。 :) – Purplemonkey 2012-03-20 16:09:37

+1

会请你解释一下更多我没有得到我怎么可以使用这个我是新的android – Developer 2013-08-14 08:30:22

0

TextWatcher是一个接口。你不能instanciate接口。一个类需要实现接口,这个类可以实例化。所以你需要创建一个类,如果匿名类没有关系,并instanciate这一点。

例子:

TextWatcher tw = new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 

      } 
     }; 
0

还要确保ID是正确的 R.id.et用于所有三个EditText上小号

0

太迟了,但这里是我如何做到这一点的如果您事先不知道需要多少听众,那么这是一种编程方式。每次创建新视图时,只需要一个函数返回一个新的侦听器,然后将其附加到该视图。

private TextWatcher getTextWatcher() { 
    return new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }; 
}