【发布时间】:2019-04-08 17:20:15
【问题描述】:
我正在尝试绑定以下元素:
xml:
<android.support.v7.widget.SwitchCompat
...
bind:onCheckedChanged="@{(isChecked) -> viewModel.onCheckedChanged(isChecked)}"
.../>
视图模型:
class MyViewModel() {
fun onCheckedChanged(isChecked: Boolean) {
...
}
}
使用 BindingAdapter:
@BindingAdapter("onCheckedChanged")
fun bindOnCheckedChanged(view: SwitchCompat, onCheckedChanged: (Boolean) -> Unit) {
view.setOnCheckedChangeListener(
{ _, isChecked ->
if (view.isPressed) onCheckedChanged(isChecked)
}
)
}
我得到的错误是这个:
数据绑定错误****msg:找不到方法 类中的 onCheckedChanged(java.lang.Object) 我的视图模型
数据绑定器似乎无法将isChecked 识别为Boolean。我试图强制输入像isChecked:Boolean 这样的xml,但我得到了一堆不同的错误。
现在我通过使用Any 而不是Boolean 使其工作,但我觉得这是错误的:
@BindingAdapter("onCheckedChanged")
fun bindOnCheckedChanged(view: SwitchCompat, onCheckedChanged: (Any) -> Unit) {
...
和
fun onCheckedChanged(isChecked: Any) {
val isSwitchChecked = isChecked as? Boolean ?: return
...
有谁知道如何使它工作正确的函数签名?
【问题讨论】:
-
你试过
bind:onCheckedChanged="@{viewModel::onCheckedChanged}"吗? -
@Fred 我试过了 -> 没用
标签: android kotlin android-databinding