2011-03-30 4 views
1

EditText에 TextWatcher를 추가하고 onTextChanged (CharSequence s, int start, int before, int count) 메서드를 통해 텍스트의 변경 사항을 수신하고 있습니다. 이 EditText에 10 문자를 말하는 텍스트를 붙여 넣을 때, onTextChanged()는 붙여 넣은 텍스트의 각 문자에 대해 한 번 왼쪽에서 오른쪽으로 10 번 호출됩니다. onTextChanged()는 EditText에 10 개의 모든 문자를 붙여 넣은 후에 한 번만 호출되기를 원합니다. 이것이 항상 가능해야한다고 확신합니다. 그렇지 않으면 항상 "1"이 될 경우 "개수"매개 변수를 가져야하는 이유가 무엇입니까?Android - TextWatcher는 붙여 넣은 텍스트의 각 문자에 대해 한 번 호출됩니다.

+0

나쁜 소식! onTextChanged()는 새 텍스트를 붙여 넣을 위치에 따라 1,2 번 또는 3 번 호출됩니다. 텍스트가 붙여 넣기중인 EditText에 텍스트가없는 경우 한 번. 새 텍스트가 원본 텍스트의 처음 또는 끝에 붙여지면 두 번 새 텍스트를 원본 텍스트 사이에 붙여 넣으면 3 배가됩니다. 이유는 붙여 넣기가 다른 캐릭터 옆에서 발생하는 경우 Android가 사이에 공백을 삽입하기 때문입니다. 공백 삽입은 실제 텍스트가 삽입되기 전에 발생합니다. 공백이 삽입되는 것을 방지하는 방법이 있다면 더 적절한 질문이 될 것입니다. – Beta

답변

2

count은 항상 1이 아닙니다. 예를 들어 텍스트 블록을 선택하고 삭제하거나 자동 완성 옵션을 선택한 경우입니다.

어떤 경우에도 한 번에 하나의 청크 또는 한 문자로 붙여 넣기가 수행되는지에 대한 세부 정보가 구현 세부 사항이며, 두 가지 동작 모두에 의존하는 경우 향후에 앱이 중단 될 수 있습니다.

+0

예, 삭제 작업의 경우 카운트가 0이됩니다. 붙여 넣기가 완료되면 무언가를하려고하므로 나에게 중요합니다. 플랫폼의 동작이 일관성이있을 것으로 기대합니다. – Beta

+0

붙여 넣기 작업의 일부로 텍스트 앞뒤에 공백을 삽입하는 일부 기능이 있습니다. 텍스트가 비어있는 것처럼 핸들러에서 텍스트를 설정할 때 예상 한 것과 다른 텍스트를 삽입하려고하면 충돌이 발생할 수 있습니다. 붙여 넣은 텍스트 앞뒤에 공백을 삽입하면 onTextChanged (및 기타) 이벤트가 추가로 발생합니다. – CJBS

-1

afterTextChanged를 사용하여 전화를 겁니다.

+0

사실이 아닙니다. afterTextChanged()는 매번 onTextChanged()가 호출 된 직후에 호출됩니다. – Beta