Kotlin stdlib和Databinding

时间:2017-04-06 12:39:00

标签: java android data-binding kotlin android-databinding

是否可以在xml中使用Kotlin stdlib中的方法?例如这段代码

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp"
    android:textColor="#333333"
    android:text="@{viewModel.note}"
    android:visibility="@{viewModel.note.isNotEmpty ? View.VISIBLE : View.GONE}"/>

产生编译错误

  

任务&#39;:app:compileDevDebugJavaWithJavac&#39;执行失败。   java.lang.RuntimeException:发现数据绑定错误。   **** /数据绑定错误**** msg:在类java.lang.String中找不到方法isNotEmpty()   文件:d:\项目\ PushTracker功能的Android \应用\ SRC \主\ RES \布局\ fragment_appointment_simple_details.xml   当前:104:44-104:70   **** \数据绑定错误****

很明显,数据绑定尝试在Java的String中查找方法isNotEmpty(),但是我可以强制数据绑定编译器使用kotlin的字符串吗?

1 个答案:

答案 0 :(得分:2)

“kotlin的字符串”不存在。 Kotlin的标准库定义了扩展方法来创建您所指的方法。但由于数据绑定库需要生成Java代码,因此无法找到您所指的方法。

为了使用该方法,您需要使用Java调用它的方式来调用它,这是一个静态函数:

kotlin.text.StringsKt.isNotEmpty(viewModel.note)

编辑:此方法使用@InlineOnly注释,因此此方法可能不存在于Kotlin代码之外。