嗨,伙计们,我有一个场景,我正在使用Android数据绑定。我正在尝试将一个小的实用程序绑定到波纹管视图
//Java Code
public class Util {
public static String capitalize(String text) {
return text.toUpperCase();
}
}
和 XML 布局代码作为下面
//layout.xml--Android
<data>
<import type="com.lkb.baseandroidproject.Util"/>
</data>
。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{Util.capitalize(user.name)}"/>
它很好,但是当我将 Java 类转换为 kotlin 时
class Util {
companion object {
fun capitalize(text:String): String {
return text.toUpperCase()
}
}
}
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{Util.Companion.capitalize(user.name)}"/>
它给出了错误
[kapt] An exception occurred: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:cannot find method capitalize(java.lang.String) in class com.lkb.baseandroidproject.Util.Companion file:/Users/leo/code/Android/Android_projects/Android_projects/BaseAndroidProject/app/src/main/res/layout/content_main.xml loc:23:32 - 23:68 **** data binding error ****
at android.databinding.tool.processing.Scope.assertNoError(Scope.java:112)
at android.databinding.annotationprocessor.ProcessDataBinding.doProcess(ProcessDataBinding.java:109)
at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:73)
at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:99)
Kotlin 代码生成的字节码如下 (Kotlin 1.3):
public final class com/example/testapp/Util$Companion {
// access flags 0x11
public final capitalize(Ljava/lang/String;)Ljava/lang/String;
如您所见,正在创建一个内部类Companion
,它实际上具有方法capitalize
。