从数据绑定Android调用Kotlin函数类型

Ada*_*331 1 android kotlin android-databinding

我有一个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()
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试retryCallback通过数据绑定进行引用时,它不能像它所说的那样进行编译cannot find method retryCallback() in class NetworkStateViewModel

<Button
    ...
    android:onClick="@{() -> viewModel.retryCallback()}"
    ... />
Run Code Online (Sandbox Code Playgroud)

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

gil*_*dor 6

只需调用invokelambda方法:

<Button
...
android:onClick="@{() -> viewModel.retryCallback.invoke()}"
... />
Run Code Online (Sandbox Code Playgroud)