Como você constrói uma expressão lambda para EditText addTextChangeListener em Kotlin? Abaixo dá um erro:
passwordEditText.addTextChangedListener { charSequence ->
try {
password = charSequence.toString()
} catch (error: Throwable) {
raise(error)
}
}
Respostas:
addTextChangedListener()
leva umTextWatcher
que é uma interface com 3 métodos. O que você escreveu só funcionaria seTextWatcher
tivesse apenas 1 método. Vou supor que o erro que você está obtendo está relacionado ao seu lambda não implementar os outros 2 métodos. Você tem 2 opções daqui para frente.E então use a extensão assim:
fonte
fun foo() = ...
)afterTextChanged.invoke(...)
vez deafterTextChanged(...)
?Um pouco antigo, mas usando as extensões Kotlin do Android, você pode fazer algo assim:
Nenhum código extra necessário, basta adicionar:
fonte
KAndroid
solução funciona perfeitamente.Adicione esta dependência ktx principal
Você simplesmente tem que fazer
passwordEditText.doAfterTextChanged{ }
fonte
espero que este
Kotlin
exemplo ajude a deixar claro:Com este
XML
layout:E este
Gradle
:fonte
Teste-o :
fonte
se você usar,
implementation 'androidx.core:core-ktx:1.1.0-alpha05'
você pode usarhttps://developer.android.com/reference/kotlin/androidx/core/widget/package-summary#extension-functions
fonte
Desculpe por estar atrasado!
Se você adicionar
implementation 'androidx.core:core-ktx:1.1.0'
ao arquivo build.gradle do seu módulo, você pode usarfonte
Outra alternativa é a
KAndroid
biblioteca -implementation 'com.pawegio.kandroid:kandroid:0.8.7@aar'
Então você poderia fazer algo assim ...
Obviamente, é excessivo usar uma biblioteca inteira para resolver seu problema, mas também vem com uma variedade de outras extensões úteis que eliminam o código clichê no Android SDK.
fonte
Você pode usar os parâmetros nomeados do kotlin:
fonte
Adicione a dependência ktx principal
implementation 'androidx.core:core-ktx:1.3.0'
E você pode simplesmente implementar assim
fonte
Isso parece legal:
fonte