addTextChangedListener()
mất TextWatcher
là giao diện với 3 phương pháp. Những gì bạn đã viết sẽ chỉ hoạt động nếu TextWatcher
chỉ có 1 phương pháp. Tôi sẽ đoán lỗi bạn đang nhận được liên quan đến lambda của bạn không thực hiện 2 phương pháp khác. Bạn có 2 tùy chọn về sau.
1) Mương các lambda và chỉ sử dụng một lớp bên trong vô danh
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(p0: Editable?) {
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
})
2) Tạo một phương pháp mở rộng, do đó bạn có thể sử dụng một biểu thức lambda:
fun EditText.afterTextChanged(afterTextChanged: (String) -> Unit) {
this.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun afterTextChanged(editable: Editable?) {
afterTextChanged.invoke(editable.toString())
}
})
}
Và sau đó sử dụng phần mở rộng như như vậy:
editText.afterTextChanged { doSomethingWithText(it) }
Nguồn
2016-11-13 01:57:19
Lỗi gì? – voddan