我尝试BindingConversion在 Kotlin 中实现 a 但我没有让它工作。在 Java 类中尝试了相同的方法BindingConversion,它似乎有效。也许我只是误解了它的工作方式,因为我对 Kotlin 还很陌生。我基本上去掉了对我的问题不重要的所有内容。.xml 文件中的部分。 <TextView android:id="@+id/the_item" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginEnd="8dp"android:text="@{ch.labrat.anima.utilities.Conv.valueFromPosition(item.gender)}"/>科特林版本。object Conv { fun valueFromPosition(position:Int):String { return "Test" }}Java 版本。public class Conv { @BindingConversion public static String valueFromPosition(Integer position){ return "Test"; }}在尝试添加@BindingConversion到 Kotlin 版本中的方法时,出现未使用静态方法的错误。出色地。我只是不明白。也许有人可以启发我?
1 回答
幕布斯7119047
TA贡献1794条经验 获得超8个赞
基本上,当您在 Kotlin 中创建对象声明并在该对象中放置一些字段/方法时,它的行为类似于 static (在 Kotlin 中访问时)代码,但它不是 static。
这意味着您可以使用该对象声明名称直接访问它(伴随对象也是如此)。
因此,在执行数据绑定时,生成的类是 Java 格式,现在它试图从 xml 访问您的对象声明,但它不能,因为它没有静态限定符。
因此,注释使用标记方法/字段被JVM@JvmStatic
编译为静态。因此,现在 Java 代码在从 Kotlin 代码访问它时将其解释为静态的。
添加回答
举报
0/150
提交
取消