Android BindingConversion 在 kotlin 中不起作用?

我尝试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 版本中的方法时,出现未使用静态方法的错误。出色地。我只是不明白。也许有人可以启发我?


胡子哥哥
浏览 151回答 1
1回答

幕布斯7119047

基本上,当您在 Kotlin 中创建对象声明并在该对象中放置一些字段/方法时,它的行为类似于 static (在 Kotlin 中访问时)代码,但它不是 static。这意味着您可以使用该对象声明名称直接访问它(伴随对象也是如此)。因此,在执行数据绑定时,生成的类是 Java 格式,现在它试图从 xml 访问您的对象声明,但它不能,因为它没有静态限定符。因此,注释使用标记方法/字段被JVM@JvmStatic编译为静态。因此,现在 Java 代码在从 Kotlin 代码访问它时将其解释为静态的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java