Wie erstellt man einen Lambda-Ausdruck für den EditText addTextChangeListener in Kotlin? Unten gibt es einen Fehler:
passwordEditText.addTextChangedListener { charSequence ->
try {
password = charSequence.toString()
} catch (error: Throwable) {
raise(error)
}
}
Antworten:
addTextChangedListener()
nimmt eine,TextWatcher
die eine Schnittstelle mit 3 Methoden ist. Was Sie geschrieben haben, würde nur funktionieren, wenn SieTextWatcher
nur eine Methode hätten. Ich gehe davon aus, dass der Fehler, den Sie erhalten, damit zusammenhängt, dass Ihr Lambda die anderen beiden Methoden nicht implementiert. Sie haben 2 Optionen für die Zukunft.Und dann benutze die Erweiterung so:
quelle
fun foo() = ...
) umgewandelt werdenafterTextChanged.invoke(...)
stattafterTextChanged(...)
?Ein bisschen alt, aber mit Kotlin Android-Erweiterungen können Sie so etwas tun:
Kein zusätzlicher Code erforderlich, einfach hinzufügen:
quelle
KAndroid
Lösung funktioniert jedoch einwandfrei.Fügen Sie diese Kern-ktx-Abhängigkeit hinzu
Du musst es einfach tun
passwordEditText.doAfterTextChanged{ }
quelle
Ich hoffe, dieses
Kotlin
Beispiel hilft dabei, es klar zu machen:Mit diesem
XML
Layout:Und das
Gradle
:quelle
Probier es aus :
quelle
Wenn Sie verwenden
implementation 'androidx.core:core-ktx:1.1.0-alpha05'
, können Sie verwendenhttps://developer.android.com/reference/kotlin/androidx/core/widget/package-summary#extension-functions
quelle
Entschuldigung für die Verspätung!
Wenn Sie
implementation 'androidx.core:core-ktx:1.1.0'
die build.gradle-Datei Ihres Moduls hinzufügen , können Sie verwendenquelle
Eine andere Alternative ist die
KAndroid
Bibliothek -implementation 'com.pawegio.kandroid:kandroid:0.8.7@aar'
Dann könnten Sie so etwas tun ...
Natürlich ist es übertrieben, eine ganze Bibliothek zu verwenden, um Ihr Problem zu lösen, aber es enthält auch eine Reihe anderer nützlicher Erweiterungen, die den Boilerplate-Code im Android SDK eliminieren.
quelle
Sie können die benannten Parameter von kotlin verwenden:
quelle
Fügen Sie die Kern-ktx-Abhängigkeit hinzu
implementation 'androidx.core:core-ktx:1.3.0'
Und Sie können einfach so implementieren
quelle
Das sieht ordentlich aus:
quelle