Bagaimana Anda membuat ekspresi lambda untuk EditText addTextChangeListener di Kotlin? Di bawah ini memberikan kesalahan:
passwordEditText.addTextChangedListener { charSequence ->
try {
password = charSequence.toString()
} catch (error: Throwable) {
raise(error)
}
}
Jawaban:
addTextChangedListener()
mengambilTextWatcher
yang merupakan antarmuka dengan 3 metode. Apa yang Anda tulis hanya akan berfungsi jikaTextWatcher
hanya memiliki 1 metode. Saya akan menebak kesalahan yang Anda dapatkan terkait dengan lambda Anda yang tidak menerapkan 2 metode lainnya. Anda memiliki 2 opsi untuk maju.Dan kemudian gunakan ekstensi seperti ini:
sumber
fun foo() = ...
)afterTextChanged.invoke(...)
bukanafterTextChanged(...)
?Agak tua, tetapi menggunakan ekstensi Android Kotlin Anda dapat melakukan sesuatu seperti itu:
Tidak perlu kode tambahan, cukup tambahkan:
sumber
KAndroid
solusi bekerja dengan sempurna.Tambahkan ketergantungan inti ktx ini
Anda hanya perlu melakukannya
passwordEditText.doAfterTextChanged{ }
sumber
harap
Kotlin
contoh ini membantu memperjelas:Dengan
XML
tata letak ini :Dan ini
Gradle
:sumber
Menguji :
sumber
jika Anda menggunakan
implementation 'androidx.core:core-ktx:1.1.0-alpha05'
Anda bisa menggunakanhttps://developer.android.com/reference/kotlin/androidx/core/widget/package-summary#extension-functions
sumber
Maaf saya terlambat!
Jika Anda menambahkan
implementation 'androidx.core:core-ktx:1.1.0'
file build.gradle modul Anda, maka Anda dapat menggunakansumber
Alternatif lain adalah
KAndroid
perpustakaan -implementation 'com.pawegio.kandroid:kandroid:0.8.7@aar'
Maka Anda bisa melakukan sesuatu seperti ini ...
Jelas berlebihan menggunakan seluruh pustaka untuk memecahkan masalah Anda, tetapi juga dilengkapi dengan berbagai ekstensi berguna lainnya yang menghilangkan kode boilerplate di Android SDK.
sumber
Anda dapat menggunakan parameter bernama kotlin:
sumber
Tambahkan ketergantungan inti ktx
implementation 'androidx.core:core-ktx:1.3.0'
Dan Anda cukup menerapkan seperti ini
sumber
Ini terlihat rapi:
sumber