如果我开始输入编辑文本,下面的代码将崩溃。
但是,如果在侦听器之前在编辑文本中设置诸如"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()
}
}
答案 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()
}
}
}