어떤 상황에서 afterTextChanged
대신 사용해야 onTextChanged
합니까?
답변
이러한 이벤트는 다음 순서로 호출됩니다.
-
beforeTextChanged (CharSequence s, int start, int count, int after) .
이것은 문자가 새로운 텍스트로 대체 될 것임을 의미합니다. 텍스트를 편집 할 수 없습니다.
사용 : 변경 될 이전 텍스트를 살펴볼 필요가있을 때. -
onTextChanged (CharSequence s, int start, int before, int count) .
변경이 이루어졌으며 일부 문자가 방금 대체되었습니다. 텍스트는 편집 할 수 없습니다.
사용 : 텍스트에서 어떤 문자가 새로운 문자인지 확인해야 할 때. -
afterTextChanged (Editable s) .
위와 동일하지만 이제 텍스트를 편집 할 수 있습니다.
사용 : 새 텍스트를보고 편집해야 할 때.
에서 변경 사항을 듣고 있다면 EditText
처음 두 가지 방법을 전혀 사용할 필요가 없습니다. 세 번째 방법으로 새 값을 받고 필요한 경우 새 텍스트를 수정합니다. 그러나 값에 발생하는 정확한 변경을 추적해야한다면 처음 두 가지 방법을 사용합니다. 변경 사항을 듣고 나서 텍스트를 편집해야하는 경우에는 세 번째 방법으로 수행합니다.
답변
public void afterTextChanged (Editable s)
이 메서드는 내부 어딘가에서
s
텍스트가 변경되었음을 알리기 위해 호출됩니다 .s
이 콜백에서 추가로 변경하는 것은 합법적 이지만, 변경하면이 메서드가 재귀 적으로 다시 호출되므로 무한 루프에 빠지지 않도록주의하십시오. (다른 afterTextChanged () 메서드가 이미 다른 변경을 수행하고 오프셋을 무효화했을 수 있기 때문에 변경이 발생한 위치를 알 수 없습니다. 그러나 여기서 알아야 할 경우setSpan(Object, int, int, int)
inonTextChanged(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 안드로이드의 참조 .
답변
Android Textwatcher
입력 필드의 텍스트 변경시 호출되는 트리거의 한 종류입니다.
afterTextChanged (Editable s)
-이 메서드는 텍스트가 변경되었을 때 호출됩니다. 변경하면이 메서드가 재귀 적으로 다시 호출되기 때문에 여기서 작업을 수행 할 때주의해야합니다. 그렇지 않으면 무한 루프 가 발생할 수 있습니다 .
onTextChanged (CharSequence s, int start, int before, int count)
-이 메서드는 s 내에서 시작에서 시작하는 카운트 문자가 이전에 길이가 있던 이전 텍스트를 방금 대체했음을 알리기 위해 호출됩니다. 이 콜백에서에 변경을 시도하는 것은 오류입니다.