【发布时间】:2017-07-20 13:52:39
【问题描述】:
我的 Android 应用程序使用ClickableSpan 来处理扰流标签。我正在尝试在TextView 中为它实现文本替换,但.replaceRange 什么也不做。我可以确认startPos 和endPos 是有效职位。
var text = ((textView as TextView).text as SpannableString)
var spans = text.getSpans(0, text.length, SpoilerSpan::class.java)
for (span in spans) {
if (span == this) {
val startPos = text.getSpanStart(span)
val endPos = text.getSpanEnd(span)
printout(startPos.toString() + " " + endPos.toString())
text.replaceRange(startPos, endPos, spoilerText)
printout(text.toString())
}
}
textView.text = text
【问题讨论】:
-
试试
Editable#replace -
@pskink 如何将其转换为 Editable?
-
和你一样吗?
var text = ((textView as TextView).text as SpannableString) -
@pskink
java.lang.ClassCastException: android.text.SpannableString cannot be cast to android.text.Editable -
SpannableString - 文档说:“这是内容不可变但可以附加和分离标记对象的文本类。对于可变文本,请参阅 SpannableStringBuilder。” 这里的关键词是 immutable
标签: java android textview kotlin