我正在尝试捕获具有链接的textview上的点击。 要实现这一点:
在BindingAdapter内部:
val clickableSpan = object : ClickableSpan() {
override fun onClick(widget: View) = onClickListener.invoke()
} ```
在ViewModel中,我创建了一个fun processUrl() { Code Here }
<TextView app:infowithlinks="@{() -> model.processUrl()}"
一切正常,我希望当我单击TextView上的链接时,能够将Url发送到ViewModel中的函数。
谢谢。
答案 0 :(得分:1)
您应该展开onClickListener
以接受字符串。然后用参数调用它。
@BindingAdapter("infowithlinks")
fun TextView.setOnSpanClickListener(clickListener:Function1<String, Unit>){
val clickableSpan = object : ClickableSpan() {
override fun onClick(widget: View){
with(text as SpannableString) {
val clickableSpan = getSpans<ClickableSpan>()
.first() // probably search correct one
val start = getSpanStart(clickableSpan)
val end = getSpanEnd(clickableSpan)
val url = text.subSequence(start, end).toString()
clickListener(url)
}
}
}
//....
}
您将在xml上
<TextView app:infowithlinks="@{model.processUrl}"
在视图模型中
fun processUrl(url : String){
}