Kotlin addTextChangeListener lambda? 質問する

Kotlin addTextChangeListener lambda? 質問する

Kotlin で EditText addTextChangeListener のラムダ式を構築するにはどうすればよいですか? 以下はエラーになります:

passwordEditText.addTextChangedListener { charSequence  ->
    try {
        password = charSequence.toString()
    } catch (error: Throwable) {
        raise(error)
    }
}

ベストアンサー1

addTextChangedListener()かかるTextWatcherこれは 3 つのメソッドを持つインターフェースです。あなたが書いたものは、TextWatcherメソッドが 1 つしかない場合にのみ機能します。あなたが受け取っているエラーは、ラムダが他の 2 つのメソッドを実装していないことに関係していると思います。今後は 2 つのオプションがあります。

  1. ラムダを捨てて匿名内部クラスを使用する
    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) {
      }
    })
  1. ラムダ式を使用できるように拡張メソッドを作成します。
    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) }

おすすめ記事