어떤 상황에서 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 내에서 시작에서 시작하는 카운트 문자가 이전에 길이가 있던 이전 텍스트를 방금 대체했음을 알리기 위해 호출됩니다. 이 콜백에서에 변경을 시도하는 것은 오류입니다.
