如何在Kotlin中用DataBinding给CheckBox的onCheckedChanged传递多参数
Kotlin DataBinding 为CheckBox onCheckedChanged 传递多参数解决方案
核心逻辑:在系统回调的lambda参数基础上,直接追加你要传入的字符串参数即可,写法区分固定字符串和绑定变量两种场景:
场景1:传递固定写死的字符串
因为XML属性外层用双引号包裹,内层固定字符串直接用单引号包裹即可避免转义冲突,示例写法:
android:onCheckedChanged="@{(switch, checked) -> availMasterVm.onCheckedChangedMondayMrng(checked, '第一个固定字符串', '第二个固定字符串')}"
如果固定字符串本身包含单引号,用反斜杠转义即可,例如'it\'s test'。
场景2:传递XML中已绑定的String变量
直接引用变量名即可,不需要加引号,需要同时保证ViewModel方法签名和XML变量定义正确:
- 首先保证ViewModel中的方法签名参数顺序、类型完全匹配,且为公开权限:
// 不要加private修饰 fun onCheckedChangedMondayMrng(isChecked: Boolean, firstParam: String, secondParam: String) { // 业务逻辑 }
- XML的data区提前定义要传递的String变量:
<data> <variable name="availMasterVm" type="你的ViewModel全路径" /> <!-- 要传递的两个String变量 --> <variable name="firstStr" type="String" /> <variable name="secondStr" type="String" /> </data>
- CheckBox绑定写法:
<CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:onCheckedChanged="@{(switch, checked) -> availMasterVm.onCheckedChangedMondayMrng(checked, firstStr, secondStr)}" />
常见报错排查
- 确认方法参数的顺序、类型和调用时传入的完全一致,不能调换Boolean和String的位置
- 确认ViewModel的对应方法没有加
private修饰符 - 修改后如果还报错,先清理项目缓存再重新构建即可解决DataBinding缓存导致的假报错
内容的提问来源于stack exchange,提问作者karteek thati
相关产品推荐
相关产品推荐

