android - 如何在数据绑定(bind)中不将参数传递给具有默认值的参数

标签 android kotlin android-xml android-databinding

是否可以在不传递参数的情况下使用 XML 中的默认参数调用 Kotlin 函数
这是我的 View 模型:

class MyViewModel: ViewModel(){

    fun doSomething(myVar: String = "defValue"){

    }
}
XML:
....
<data>
    <variable
        name="viewModel"
        type="com.example.MyViewModel" />
</data>
....
android:onClick="@{(view) -> viewModel.doSomething()}"  --> ERROR
android:onClick="@{(view) -> viewModel.doSomething(`SomeString`)}"  --> WORKING
....
当我调用 doSomething没有来自带有数据绑定(bind)的 XML 参数的方法我收到错误。
[databinding] {"msg":"cannot find method doSomething() in class com.example.MyViewModel","file":"app\\src\\main\\res\\layout\\fragment_list.xml","pos":[{"line0":56,"col0":41,"line1":56,"col1":65}]}

最佳答案

使用 @JvmOverloads 注释您的 Kotlin 方法. Java 没有默认参数的概念。此注解让 Kotlin 编译器生成一个无参数方法,因此您可以依次从 Java 和数据绑定(bind) XML 调用它。
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-jvm-overloads/

关于android - 如何在数据绑定(bind)中不将参数传递给具有默认值的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62709712/

相关文章:

android - Google Play 中提供的 Android 应用测试版

gradle - 当我升级到 Kotlin 1.3.30 时,为什么 Kotlin JSR223 脚本停止工作

android - 根据语言选择对齐 TextView (左 - 右)

android - 如何设置按钮之间的距离?

android - 在 Fragment 中选择微调器项目时复选框消失

返回空列表的 Android 解析查询

android - 如何使用Android预定义常量在xml布局文件中绑定(bind)数据

android - 设置飞行模式并不完全有效

java - 什么时候应该阻止/订阅 Mono/Flux?

Spring Transactional - 确保测试和产品中的可预测行为