在onTextChanged侦听器中调用Editable.clearSpans()时,Edittext冻结

时间:2019-09-11 17:32:03

标签: android kotlin

如果我开始输入编辑文本,下面的代码将崩溃。 但是,如果在侦听器之前在编辑文本中设置诸如"Hello asdf"之类的String,则代码将按预期运行; "asdf"字符串将以粗体显示,直到我从字符串末尾清除“ f”,然后编辑文本UI才会冻结,但不会崩溃。 看来问题出在it?.clearSpans()方法上。

有什么想法吗?

editText.addTextChangedListener {
    val TEXT = "asdf"
    if (it?.contains(TEXT) == true) {
        val i = it.toString().indexOf(TEXT)
        it.setSpan(
            StyleSpan(Typeface.BOLD),
            i,
            i + TEXT.length,
            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
        )
    } else {
        it?.clearSpans()
    }
}

1 个答案:

答案 0 :(得分:0)

清除跨度后,textChangedListener会再次触发,因此会陷入无限循环。

您需要退出条件才能停止此操作。也许检查文本是否已经为空:

    editText.addTextChangedListener {
        if(!it.toString().isBlank()) {
                    val TEXT = "asdf"
                    if (it?.contains(TEXT) == true) {
                        val i = it.toString().indexOf(TEXT)
                        it.setSpan(
                                StyleSpan(Typeface.BOLD),
                                i,
                                i + TEXT.length,
                                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
                        )
                    } else {
                        it?.clearSpans()
                    }
                }
    }