Kotlin で EditText addTextChangeListener のラムダ式を構築するにはどうすればよいですか? 以下はエラーになります:
passwordEditText.addTextChangedListener { charSequence ->
try {
password = charSequence.toString()
} catch (error: Throwable) {
raise(error)
}
}
ベストアンサー1
addTextChangedListener()
かかるTextWatcher
これは 3 つのメソッドを持つインターフェースです。あなたが書いたものは、TextWatcher
メソッドが 1 つしかない場合にのみ機能します。あなたが受け取っているエラーは、ラムダが他の 2 つのメソッドを実装していないことに関係していると思います。今後は 2 つのオプションがあります。
- ラムダを捨てて匿名内部クラスを使用する
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
})
- ラムダ式を使用できるように拡張メソッドを作成します。
fun EditText.afterTextChanged(afterTextChanged: (String) -> Unit) {
this.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
override fun afterTextChanged(editable: Editable?) {
afterTextChanged.invoke(editable.toString())
}
})
}
そして、次のように拡張機能を使用します。
editText.afterTextChanged { doSomethingWithText(it) }