[android] Android TextWatcher.afterTextChanged 대 TextWatcher.onTextChanged

어떤 상황에서 afterTextChanged대신 사용해야 onTextChanged합니까?



답변

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

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


답변

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 안드로이드의 참조 .


답변

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

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

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


답변