addTextChangedListener()
занимает TextWatcher
, который является интерфейсом с 3-мя методами. То, что вы написали, будет работать только в том случае, если TextWatcher
имел только 1 метод. Я собираюсь угадать, что ошибка, которую вы получаете, связана с вашей лямбдой, не реализующей другие 2 метода. У вас есть 2 варианта вперёд.
1) Ditch лямбда и просто использовать анонимный внутренний класс
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) Создать метод расширения, так что вы можете использовать лямбда-выражение:
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())
}
})
}
И затем использовать расширение как так:
editText.afterTextChanged { doSomethingWithText(it) }
Какая ошибка это дает? – voddan