Android TextWatcher.afterTextChanged 대 TextWatcher.onTextChanged


답변:


199

이러한 이벤트는 다음 순서로 호출됩니다.

  1. beforeTextChanged (CharSequence s, int start, int count, int after) .
    이것은 문자가 새로운 텍스트로 대체 될 것임을 의미합니다. 텍스트를 편집 할 수 없습니다.
    사용 : 변경 될 이전 텍스트를 살펴볼 필요가있을 때.

  2. onTextChanged (CharSequence s, int start, int before, int count) .
    변경이 이루어졌으며 일부 문자가 방금 대체되었습니다. 텍스트는 편집 할 수 없습니다.
    사용 : 텍스트에서 어떤 문자가 새로운 문자인지 확인해야 할 때.

  3. afterTextChanged (Editable s) .
    위와 동일하지만 이제 텍스트를 편집 할 수 있습니다.
    사용 : 새 텍스트를보고 편집해야 할 때.

에서 변경 사항을 듣고 있다면 EditText처음 두 가지 방법을 전혀 사용할 필요가 없습니다. 세 번째 방법으로 새 ​​값을 받고 필요한 경우 새 텍스트를 수정합니다. 그러나 값에 발생하는 정확한 변경을 추적해야한다면 처음 두 가지 방법을 사용합니다. 변경 사항을 듣고 나서 텍스트를 편집해야하는 경우에는 세 번째 방법으로 수행합니다.


onTextChanged의 텍스트 변경이 ANR로 이어지는 이유를 이해하는 데 도움이되었습니다.
Sukhvir Singh

12

public void afterTextChanged (Editable s)

이 메서드는 내부 어딘가에서 s텍스트가 변경되었음을 알리기 위해 호출됩니다 . s이 콜백에서 추가로 변경하는 것은 합법적 이지만, 변경하면이 메서드가 재귀 적으로 다시 호출되므로 무한 루프에 빠지지 않도록주의하십시오. (다른 afterTextChanged () 메서드가 이미 다른 변경을 수행하고 오프셋을 무효화했을 수 있기 때문에 변경이 발생한 위치를 알 수 없습니다. 그러나 여기서 알아야 할 경우 setSpan(Object, int, int, int)in onTextChanged(CharSequence, int, int, int)을 사용 하여 위치를 표시 한 다음 여기에서 찾을 수 있습니다. 스팬이 끝났습니다.

public void beforeTextChanged (CharSequence s, int start, int count, int after)

이 메서드는 내 에서 로 시작 s하는 count문자 start가 length 인 새 텍스트로 대체 될 예정 임을 알리기 위해 호출됩니다 after. s이 콜백에서 변경을 시도하는 것은 오류 입니다.

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

이 메서드는 내 s에서로 count시작 하는 문자 start가 length가있는 이전 텍스트를 방금 대체 했음을 알리기 위해 호출됩니다 before. s이 콜백에서 변경을 시도하는 것은 오류 입니다.

오른쪽에서 TextWatcher 안드로이드의 참조 .


API 코드를 복사하는 이유는 무엇입니까? API는 "인간이 읽을 수없는"경우가 많습니다.
matua

@matua이 질문 / 답변은 11 년 전의 것입니다.
GregD

그런 다음 댓글을 차단해야합니다.)
matua

0

Android Textwatcher 입력 필드의 텍스트 변경시 호출되는 트리거의 한 종류입니다.

afterTextChanged (Editable s)-이 메서드는 텍스트가 변경되었을 때 호출됩니다. 변경하면이 메서드가 재귀 적으로 다시 호출되기 때문에 여기서 작업을 수행 할 때주의해야합니다. 그렇지 않으면 무한 루프 가 발생할 수 있습니다 .

onTextChanged (CharSequence s, int start, int before, int count)-이 메서드는 s 내에서 시작에서 시작하는 카운트 문자가 이전에 길이가 있던 이전 텍스트를 방금 대체했음을 알리기 위해 호출됩니다. 이 콜백에서에 변경을 시도하는 것은 오류입니다.


6
문서를 복사 / 붙여 넣기하는 것은 도움이되지 않으며 질문에 답하지도 않습니다.
데이비드 WASSER
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.