Как вы создаете лямбда-выражение для EditText addTextChangeListener в Kotlin? Ниже выдает ошибку:
passwordEditText.addTextChangedListener { charSequence ->
try {
password = charSequence.toString()
} catch (error: Throwable) {
raise(error)
}
}
Ответы:
addTextChangedListener()
принимаетTextWatcher
интерфейс с 3 методами. То, что вы написали, будет работать, только еслиTextWatcher
у вас будет только 1 метод. Я собираюсь предположить, что полученная вами ошибка связана с тем, что ваша лямбда не реализует другие 2 метода. У вас есть 2 варианта развития событий.А затем используйте расширение так:
источник
fun foo() = ...
)afterTextChanged.invoke(...)
вместоafterTextChanged(...)
?Немного устарел, но с помощью расширений Kotlin для Android можно сделать что-то вроде этого:
Дополнительного кода не требуется, просто добавьте:
источник
KAndroid
решение работает отлично.Добавьте эту базовую зависимость ktx
Вам просто нужно сделать
passwordEditText.doAfterTextChanged{ }
источник
надеюсь, что этот
Kotlin
образец поможет прояснить ситуацию:С этим
XML
макетом:А это
Gradle
:источник
Попробуй это :
источник
если вы используете,
implementation 'androidx.core:core-ktx:1.1.0-alpha05'
вы можете использоватьhttps://developer.android.com/reference/kotlin/androidx/core/widget/package-summary#extension-functions
источник
Извините за опоздание!
Если вы добавите
implementation 'androidx.core:core-ktx:1.1.0'
в свой модуль файл build.gradle, вы можете использоватьисточник
Другой альтернативой является
KAndroid
библиотека -implementation 'com.pawegio.kandroid:kandroid:0.8.7@aar'
Тогда вы могли бы сделать что-то вроде этого ...
Очевидно, что использовать всю библиотеку для решения вашей проблемы излишне, но она также включает ряд других полезных расширений, которые устраняют шаблонный код в Android SDK.
источник
Вы можете использовать именованные параметры kotlin:
источник
Добавить основную зависимость ktx
implementation 'androidx.core:core-ktx:1.3.0'
И вы можете просто реализовать вот так
источник
Это выглядит аккуратно:
источник