2017-04-06 99 views
1

是否可以在xml中使用Kotlin stdlib中的方法?例如该代码Kotlin stdlib和Databinding

<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}"/> 

产生编译错误

执行失败的任务 ':应用程序:compileDevDebugJavaWithJavac'。 java.lang.RuntimeException:发现数据绑定错误。 ****/data binding error **** msg:无法在类java.lang.String中找到方法isNotEmpty() file:D:\ Projects \ PushTracker -Android \ app \ src \ main \ res \ layout \ fragment_appointment_simple_details.xml LOC:104:44 - 104:70个**** \数据绑定错误****

显而易见的是,数据绑定试图找到方法isNotEmpty()在Java中的字符串,但我可以强制绑定编译器使用kotlin的字符串?

回答

2

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

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

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

编辑:此方法标注了@InlineOnly,所以此方法可能不存在Kotlin代码之外。

+1

是的,我试过这个,但也用'@InlineOnly'填充。据我所知,只有一个解决方案 - 用@ JvmStatic'在一些辅助对象中定义这个方法@ – dewarder

+1

@Google'@ JvmStatic'没有必要,你可以调用这个方法。推荐的方法是使用文件级功能,而不是对象方法。 – voddan