2011-05-10 2 views
7

나는 특정 EditTexts의 변화를 감지하는 TextWatcher를 확장하는 활동을, 그래서 구현 :afterTextChanged 이벤트 편집 가능한 ID를 가져

public void afterTextChanged(Editable s) 

내 질문은 : .addTextChangedListener 여러 EditTexts가있는 경우 (이) 세트를 , 어떻게 AfterTextChanged 프로 시저에서 편집 가능한 객체가 변경되었는지 구분할 수 있습니까?

답변

11

익명 내부 클래스가 적은 다른 옵션은 현재 포커스가있는 View을 간단히 검사하는 것입니다. TextWatcher에 대한 응용 프로그램이을 입력하는 동안 사용자가 변경 한 사항에만 의존적 인 경 우 변경 사항은 항상 현재 포커스가있는 View에서 발생합니다. Activity 또는 Window의 어느 곳에서나 getCurrentFocus()을 호출하면 사용자가 집중된 View을 반환합니다. 내부에서 TextWatcher은 거의 확실하게 특정 EditText 인스턴스가됩니다. 도움

SDK Docs Link

희망!

+1

'getCurrentFocus()'한 작품. 감사. – offset

0

TextWatcher for more than one EditText을 참조하십시오. 모니터링하는 편집 텍스트를 정의하는 생성자를 사용하여 수신기를 처리하는 클래스를 기본적으로 만들고 할당하려는 edittext를 전달하십시오.

2

모든 EditText에 대한 TextWatcher 객체를 생성하지 않고이를 구현하는 하나 개의 방법이있다,하지만 나는 그것을 사용하지 것이다 :

protected void onCreate(Bundle savedInstanceState) { 
    // initialization... 

    EditText edit1 = findViewById(R.id.edit1); 
    edit1.addTextChangedListener(this); 
    EditText edit2 = findViewById(R.id.edit1); 
    edit2.addTextChangedListener(this); 
} 

private static CharSequence makeInitialString(EditText edit) { 
    SpannableStringBuilder builder = new SpannableStringBuilder(); 
    builder.setSpan(edit, 0, 0, Spanned.SPAN_MARK_MARK); 
    return builder; 
} 

public void afterTextChanged(Editable s) { 
    EditText[] edits = s.getSpans(0, s.length(), EditText.class); 
    if (edits.length != 1) { 
     // this mustn't happen 
    } 

    // here's changed EditText 
    EditText edit = edits[0]; 
}