Comment créer une expression lambda pour le AddTextChangeListener EditText dans Kotlin? Ci-dessous donne une erreur:
passwordEditText.addTextChangedListener { charSequence ->
try {
password = charSequence.toString()
} catch (error: Throwable) {
raise(error)
}
}
Réponses:
addTextChangedListener()
prend unTextWatcher
qui est une interface avec 3 méthodes. Ce que vous avez écrit ne fonctionnerait que si vous n'aviez qu'uneTextWatcher
seule méthode. Je vais deviner que l'erreur que vous obtenez est liée au fait que votre lambda n'implémente pas les 2 autres méthodes. Vous avez 2 options pour l'avenir.Et puis utilisez l'extension comme ceci:
la source
fun foo() = ...
)afterTextChanged.invoke(...)
au lieu deafterTextChanged(...)
?Un peu vieux, mais en utilisant les extensions Android de Kotlin, vous pouvez faire quelque chose comme ça:
Aucun code supplémentaire nécessaire, ajoutez simplement:
la source
KAndroid
solution fonctionne parfaitement.Ajouter cette dépendance ktx principale
Vous devez simplement faire
passwordEditText.doAfterTextChanged{ }
la source
J'espère que cet
Kotlin
exemple vous aidera à clarifier:Avec cette
XML
disposition:Et ceci
Gradle
:la source
Essaye-le :
la source
si vous utilisez,
implementation 'androidx.core:core-ktx:1.1.0-alpha05'
vous pouvez utiliserhttps://developer.android.com/reference/kotlin/androidx/core/widget/package-summary#extension-functions
la source
Désolé d'être en retard!
Si vous ajoutez
implementation 'androidx.core:core-ktx:1.1.0'
au fichier build.gradle de votre module, vous pouvez utiliserla source
Une autre alternative est la
KAndroid
bibliothèque -implementation 'com.pawegio.kandroid:kandroid:0.8.7@aar'
Ensuite, vous pourriez faire quelque chose comme ça ...
Évidemment, il est excessif d'utiliser une bibliothèque entière pour résoudre votre problème, mais il est également livré avec une gamme d'autres extensions utiles qui éliminent le code standard dans le SDK Android.
la source
Vous pouvez utiliser les paramètres nommés de kotlin:
la source
Ajouter la dépendance ktx principale
implementation 'androidx.core:core-ktx:1.3.0'
Et vous pouvez simplement mettre en œuvre comme ça
la source
Cela a l'air bien:
la source