我已经向CompoundButton添加了一个删除线。我如何添加删除的要点是:
fun CompoundButton.addStrikeThrough() {
val span = SpannableString(text)
span.setSpan(
StrikethroughSpan(),
0,
text.length,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
text = span
}
我使用的是Spannable,因为我并不总是希望整篇文章能够完成。 CompoundButton实际上是一个CheckBox,在选中时会触发文本。我在CheckBox项目列表中使用上述方法,并在onBindViewHolder中设置了一个监听器。
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val todoText = todos[position]
holder.checkBox.apply {
isChecked = false
text = todoText
setOnCheckedChangeListener { checkBox, isChecked ->
if (isChecked) {
checkBox.addStrikeThrough()
} else {
// how do I write this?
checkBox.removeStrikeThrough()
}
}
}
}
当我删除然后将另一个项目添加到列表中时,我已经处理了回收视图的问题 - 让我对已经回收的项目进行了删除。
如何从CheckBox中删除删除?
我尝试从CheckBox中获取文本并将其转换为Spannable和SpannableString,以便我可以调用removeSpan()
,但文本永远不是这两个类中任何一个的实例。
我看过一两个大致相同的问题,但他们的答案不起作用。
答案 0 :(得分:1)
您可以稍微更改一下代码并获得以下内容:
fun CompoundButton.setText(buttonText: String, withStrike: Boolean) {
text = if (withStrike) {
val span = SpannableString(buttonText)
span.setSpan(
StrikethroughSpan(),
0,
text.length,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
span
} else {
buttonText
}
}
在适配器中:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val todoText = todos[position]
holder.checkBox.apply {
isChecked = false
text = todoText
setOnCheckedChangeListener { checkBox, isChecked ->
checkBox.setText(todoText, isChecked)
}
}
}