Câu trả lời:
Các sự kiện này được gọi theo thứ tự sau:
beforeTextChanged (CharSequence s, int start, int count, int after) .
Điều này có nghĩa là các ký tự sắp được thay thế bằng một số văn bản mới. Văn bản không thể chỉnh sửa.
Sử dụng: khi bạn cần xem lại văn bản cũ sắp thay đổi.
onTextChanged (CharSequence s, int start, int before, int count) .
Các thay đổi đã được thực hiện, một số ký tự vừa được thay thế. Văn bản không thể chỉnh sửa.
Sử dụng: khi bạn cần xem ký tự nào trong văn bản là mới.
afterTextChanged (Có thể chỉnh sửa) .
Tương tự như trên, ngoại trừ bây giờ văn bản có thể chỉnh sửa .
Sử dụng: khi bạn cần xem và có thể chỉnh sửa văn bản mới.
Nếu tôi chỉ lắng nghe các thay đổi trong EditText
, tôi sẽ không cần phải sử dụng hai phương pháp đầu tiên. Tôi sẽ chỉ nhận các giá trị mới trong phương thức thứ ba và sửa văn bản mới nếu cần. Tuy nhiên, nếu tôi phải theo dõi các thay đổi chính xác xảy ra với các giá trị, tôi sẽ sử dụng hai phương pháp đầu tiên. Nếu tôi cũng có nhu cầu chỉnh sửa văn bản sau khi nghe các thay đổi, tôi sẽ thực hiện điều đó trong phương pháp thứ ba.
public void afterTextChanged (Có thể chỉnh sửa)
Phương thức này được gọi để thông báo cho bạn rằng, ở đâu đó bên trong
s
, văn bản đã được thay đổi. Việc thực hiện các thay đổi tiếp theos
từ lệnh gọi lại này là hợp pháp , nhưng hãy cẩn thận để không đưa mình vào một vòng lặp vô hạn, bởi vì bất kỳ thay đổi nào bạn thực hiện sẽ khiến phương thức này được gọi lại một cách đệ quy. (Bạn không nói nơi sự thay đổi đã diễn ra vì afterTextChanged khác () phương pháp có thể đã thực hiện thay đổi khác và không còn giá trị offsets. Nhưng nếu bạn cần phải biết ở đây, bạn có thể sử dụngsetSpan(Object, int, int, int)
trongonTextChanged(CharSequence, int, int, int)
để đánh dấu vị trí của bạn và sau đó nhìn lên từ đây nơi kết thúc khoảng thời gian.
public void beforeTextChanged (CharSequence s, int start, int count, int after)
Phương thức này được gọi để thông báo cho bạn rằng, bên trong
s
, cáccount
ký tự bắt đầu ởstart
đó sắp được thay thế bằng văn bản mới có độ dàiafter
. Đó là một lỗi khi cố gắng thực hiện các thay đổis
từ cuộc gọi lại này.
public void onTextChanged (CharSequence s, int start, int before, int count)
Phương thức này được gọi để thông báo cho bạn rằng, bên trong
s
, cáccount
ký tự bắt đầustart
vừa thay thế văn bản cũ có độ dàibefore
. Đó là một lỗi khi cố gắng thực hiện các thay đổis
từ cuộc gọi lại này.
Ngay từ Tham chiếu của Android cho TextWatcher .
Android Textwatcher
là một loại trình kích hoạt được gọi khi thay đổi văn bản của trường đầu vào.
afterTextChanged (Editable s)
- Phương thức này được gọi khi văn bản đã được thay đổi. Bởi vì bất kỳ thay đổi nào bạn thực hiện sẽ khiến phương thức này được gọi lại một cách đệ quy, bạn phải cẩn thận khi thực hiện các thao tác ở đây, nếu không nó có thể dẫn đến vòng lặp vô hạn .
onTextChanged (CharSequence s, int start, int before, int count)
- Phương thức này được gọi để thông báo cho bạn rằng, trong vòng s, các ký tự đếm bắt đầu ở đầu vừa thay thế văn bản cũ có độ dài trước đó. Đó là một lỗi khi cố gắng thực hiện các thay đổi đối với s từ lệnh gọi lại này.