2012-03-20 6 views
4

이 코드는 실제로 이상합니다. 어제 나는 Yesterdays question 코드를 복제하지 않도록 여러 editText 리스너를 구현하는 방법을 질문했습니다. 나는 친절하게 답을 주었다. (나는 맹세했다.) 그러나 오늘 나는 그것을 가지고 어디에도 가지 않았다. 다음 작업을 수행하려고하는데 tw Textwatcher를 설치하려고 할 때 Cannot instantiate the type TextWatcher 오류가 발생합니다.OnTextChangedListener가있는 Android 다중 EditText

**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

당신은 "이"

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

이것은 정말로 이상합니다. 왜 저를 먼저 일하지 않았습니까! 오 잘 나무 아마 나무의 경우. 신속한 답장을 보내 주셔서 대단히 감사합니다. :) – Purplemonkey

+1

u는 이것에 대해 더 설명 할 것이기 때문에 나는 이것을 어떻게 사용할 수 있을지 모르겠다. 나는 안드로이드에서 새로운 것이다. – Developer

0

TextWatcher이 인터페이스를 사용하는 TextWatcher 인스턴스를 필요가 없습니다. 인터페이스를 초기화 할 수 없습니다. 클래스는 인터페이스를 구현해야하며이 클래스는 인스턴스화 될 수 있습니다. 따라서 익명의 클래스가 아닌 클래스를 생성하고 인스턴스를 생성해야합니다.

예 :

또한
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

하는 식별자가 올바른지 확인 R.id.et가 사용되는 모든 세 글고의

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) { 

     } 
    }; 
}