Jak zbudować wyrażenie lambda dla EditText addTextChangeListener w Kotlinie? Poniżej podaje błąd:
passwordEditText.addTextChangedListener { charSequence ->
try {
password = charSequence.toString()
} catch (error: Throwable) {
raise(error)
}
}
Odpowiedzi:
addTextChangedListener()
przyjmujeTextWatcher
interfejs z 3 metodami. To, co napisałeś, zadziałałoby tylko, gdybyśTextWatcher
miał tylko 1 metodę. Zgaduję, że błąd, który otrzymujesz, odnosi się do twojej lambdy, która nie implementuje pozostałych 2 metod. Masz 2 opcje w przyszłości.Następnie użyj rozszerzenia w ten sposób:
źródło
fun foo() = ...
)afterTextChanged.invoke(...)
zamiastafterTextChanged(...)
?Trochę stary, ale używając rozszerzeń Kotlin na Androida możesz zrobić coś takiego:
Nie potrzeba żadnego dodatkowego kodu, wystarczy dodać:
źródło
KAndroid
rozwiązanie działa idealnie.Dodaj tę podstawową zależność od ktx
Po prostu musisz to zrobić
passwordEditText.doAfterTextChanged{ }
źródło
mam nadzieję, że ta
Kotlin
próbka pomoże wyjaśnić:W tym
XML
układzie:A to
Gradle
:źródło
Sprawdź to :
źródło
jeśli używasz
implementation 'androidx.core:core-ktx:1.1.0-alpha05'
, możesz użyćhttps://developer.android.com/reference/kotlin/androidx/core/widget/package-summary#extension-functions
źródło
Przepraszam za spóźnienie!
Jeśli dodasz
implementation 'androidx.core:core-ktx:1.1.0'
do pliku build.gradle swojego modułu, możesz użyćźródło
Inną alternatywą jest
KAndroid
biblioteka -implementation 'com.pawegio.kandroid:kandroid:0.8.7@aar'
Wtedy mógłbyś zrobić coś takiego ...
Oczywiście używanie całej biblioteki do rozwiązania problemu jest przesadą, ale zawiera ona również szereg innych przydatnych rozszerzeń, które eliminują standardowy kod w Android SDK.
źródło
Możesz skorzystać z nazwanych parametrów kotlin:
źródło
Dodaj zależność core ktx
implementation 'androidx.core:core-ktx:1.3.0'
I możesz po prostu zaimplementować w ten sposób
źródło
To wygląda schludnie:
źródło