EditTextの確定検出
android開発ではおなじみ「EditText」
TextWatcherというもので入力を監視することができ、入力確定を検出してあれこれ処理をしたかったが、うまくいきませんでした。。
理由としては、確定検出をしてくれるであろうと思っていた afterTextChanged() がDelateやEnterを押したときにも検出されたからだ。
自分はTextWatcherを利用して入力の確定(ソフトウェアキーボードの終了)したときに、EditTextに入力された文字列をhtmlタグで挟もうとしていたが、上記の理由で間違った実装をしてしまい大変なことになった。
EditTextの確定検出については調べるとたくさんの人が解決策を紹介してくれていたので、参考にさせていただいて以下のコードで無事解決することができた。
holder!!.editText.addTextChangedListener(object : TextWatcher{ var currentLength = 0 var keycodeFlag : Boolean = false override fun afterTextChanged(s: Editable?) { if (s.toString().length < currentLength || keycodeFlag) { keycodeFlag = false return } var unfixed = false val spanned = s!!.getSpans(0, s.length, Any::class.java) if (spanned != null) { for (obj in spanned) { if (obj is android.text.style.UnderlineSpan) { unfixed = true } } } if (!unfixed) { //確定検出時に行いたい処理はココ } } override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { currentLength = s.toString().length } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { if (count == 0) { keycodeFlag = true } } })
参考:EditText入力終了検知 〜 確定による検知の一部改造|Android開発メモ書き
上記のコードはrecyclerView内のEditTextに対して行っているため、使用していない場合はholderの記述は不要。
参考リンク: