首页 > 解决方案 > 从数据绑定 Android 调用 Kotlin 函数类型

问题描述

我有一个BaseObservable我在数据绑定中使用的来显示网络状态。在这个类中,我传递了一个重试回调,我希望在单击按钮时运行它:

class NetworkStateViewModel(val retryCallback: () -> Unit) : BaseObservable() {
    var networkState: NetworkState? = null
        set(value) {
            field = value

            notifyChange()
        }

    val isLoading: Boolean
        @Bindable get() = networkState is NetworkState.Loading

    val isShowingError: Boolean
        @Bindable get() = networkState is NetworkState.Error

    val errorText: String
        @Bindable get() = (networkState as? NetworkState.Error)?.error?.message.orEmpty()
}

但是,当我尝试retryCallback通过数据绑定进行引用时,它无法编译,因为它说它是cannot find method retryCallback() in class NetworkStateViewModel.

<Button
    ...
    android:onClick="@{() -> viewModel.retryCallback()}"
    ... />

到目前为止,我找到了一个解决方法,我将单独发布作为答案,但我想知道我是否可以直接调用它。

标签: androidkotlinandroid-databinding

解决方案


只需调用invokelambda 的方法:

<Button
...
android:onClick="@{() -> viewModel.retryCallback.invoke()}"
... />

推荐阅读