Yanıtlar:
Bu olaylar aşağıdaki sırayla çağrılır:
beforeTextChanged (CharSequence s, int start, int count, int after) .
Bu, karakterlerin yeni bir metinle değiştirilmek üzere olduğu anlamına gelir. Metin düzenlenemez.
Kullanın: değişmek üzere olan eski metne bakmanız gerektiğinde.
onTextChanged (CharSequence s, int start, int before, int count) .
Değişiklikler yapıldı, bazı karakterler yeni değiştirildi. Metin düzenlenemez.
Kullanın: metindeki hangi karakterlerin yeni olduğunu görmeniz gerektiğinde.
afterTextChanged (Düzenlenebilir ler) .
Yukarıdakinin aynısı, ancak artık metin düzenlenebilir .
Kullanın: yeni metni görmeniz ve muhtemelen düzenlemeniz gerektiğinde.
Sadece değişiklik olup EditText
olmadığını dinliyorsam , ilk iki yöntemi hiç kullanmam gerekmeyecek. Sadece üçüncü yöntemde yeni değerler alacağım ve gerekirse yeni metni düzelteceğim. Bununla birlikte, değerlerde meydana gelen tam değişiklikleri izlemem gerekirse, ilk iki yöntemi kullanırdım. Değişiklikleri dinledikten sonra metni de düzenlemeye ihtiyacım olsaydı, bunu üçüncü yöntemde yapardım.
public void afterTextChanged (Düzenlenebilir s)
Bu yöntem,
s
metnin içinde bir yerde değiştiğini size bildirmek için çağrılır .s
Bu geri aramadan daha fazla değişiklik yapmak meşru , ancak kendinizi sonsuz bir döngüye sokmamaya dikkat edin, çünkü yaptığınız herhangi bir değişiklik bu yöntemin yinelemeli olarak yeniden çağrılmasına neden olacaktır. (Diğer afterTextChanged () yöntemleri zaten başka değişiklikler yapmış ve uzaklıklar geçersiz olabilir, çünkü değişim gerçekleşti nerede söyledi değildir. Ama burada bilmek gerekiyorsa, kullanabilirsinizsetSpan(Object, int, int, int)
içindeonTextChanged(CharSequence, int, int, int)
yerinizi işaretlemek için ve daha sonra burada yerden bakmak aralık sona erdi.
public void beforeTextChanged (CharSequence s, int start, int count, int after)
İçinde bu yöntem, size bildirmek için çağrılır
s
,count
başlayan karakterlerstart
uzunluğunda yeni metin olarak yerleştirilecek üzeresinizafter
.s
Bu geri aramadan üzerinde değişiklik yapmaya çalışmak bir hatadır .
public void onTextChanged (CharSequence s, int start, int before, int count)
Bu yöntem dahilinde, size bildirmek için çağrılır
s
,count
başlayan karakterlerstart
sadece uzunluğuna sahip olduğu eski metni yerini almıştırbefore
.s
Bu geri aramadan üzerinde değişiklik yapmaya çalışmak bir hatadır .
Doğrudan Android'in TextWatcher Referansı'ndan .
Android Textwatcher
bir giriş alanının metin değişikliğinde çağrılan bir tür tetikleyicidir.
afterTextChanged (Editable s)
- Bu yöntem, metin değiştirildiğinde çağrılır. Yapacağınız herhangi bir değişiklik bu yöntemin yinelemeli olarak yeniden çağrılmasına neden olacağından, burada işlem yapma konusunda dikkatli olmanız gerekir, aksi takdirde sonsuz döngüye yol açabilir .
onTextChanged (CharSequence s, int start, int before, int count)
- Bu yöntem, s içinde, başlangıçta başlayan sayı karakterlerinin daha önce uzunluğu olan eski metnin yerini aldığını size bildirmek için çağrılır. Bu geri aramadan 'ler üzerinde değişiklik yapmaya çalışmak bir hatadır.