Android 使用Spanable类型的ObservaleField进行数据绑定

Android 使用Spanable类型的ObservaleField进行数据绑定,android,observable,android-databinding,Android,Observable,Android Databinding,我一直在ViewModel中使用ObservaleField。但现在我有HTML格式的文本,我想显示。我可以为此使用Spanable类型的ObservableField吗?在旧的情况下,我使用setEditText方法,这是有效的 新情况: var spannableText=可观察字段 乐趣设置编辑文本使用可观察{ 变量完成= 此文件为.spannableText.setcomplete.tospan可扩展 } 旧情况: fun SetEditTextView:TextView,text:St

我一直在ViewModel中使用ObservaleField。但现在我有HTML格式的文本,我想显示。我可以为此使用Spanable类型的ObservableField吗?在旧的情况下,我使用setEditText方法,这是有效的

新情况:

var spannableText=可观察字段 乐趣设置编辑文本使用可观察{ 变量完成= 此文件为.spannableText.setcomplete.tospan可扩展 } 旧情况:

fun SetEditTextView:TextView,text:String{ 如果Build.VERSION.SDK\u INT>=Build.VERSION\u code.N{ textView.text=Html.fromHtmltext,Html.TO_Html_段落_行_连续。TO可浏览 }否则{ @抑制折旧 textView.text=Html.fromHtmltext.toSpannable } textView.movementMethod=LinkMovementMethod.getInstance } 相关的XML:


解决方案是使用bindadapter 视图模型

val SPANABLE:ObservaleField=ObservaleFieldHTML .fromHtml 有趣的changeTexttext:String{ spannable.setHtml.fromHtmltext } 活页夹

@BindingAdapterandroid:文本 公共静态无效跨区文本视图文本视图,跨区可扩展{ textView.setTextspannable; }
现在您可以使用changeText函数对其进行更改。

正确的解决方案是使用SpannableString而不是Spannable

var spannableText = ObservableField<SpannableString>()

    val text: SpannableString?
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        text = SpannableString(Html.fromHtml(complete, Html.TO_HTML_PARAGRAPH_LINES_CONSECUTIVE))
    } else {
        @Suppress("DEPRECATION")
        text = SpannableString(Html.fromHtml(complete))
    }

    spannableText.set(text)

这不起作用吗?这无法编译,ObservaleField无法初始化。还有比这更优雅的解决方案吗?@JimClermonts再试一次我写了两次ObservableField属性getter或setter。span是一个接口,对吗?@JimClermonts不,你不需要任何setter和getter,只要尝试一下,它就会显示你的html。为什么需要setter和getter?用于处理链接??错误:需要属性getter或setter;期望成员声明