我有一个BaseObservable
,可用于数据绑定(bind)以显示网络状态。在此类中,我传递了一个重试回调,该回调在每次单击按钮时都想运行:
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()
}
但是,当我尝试通过数据绑定(bind)引用
retryCallback
时,它无法编译,因为它说的是cannot find method retryCallback() in class NetworkStateViewModel
。<Button
...
android:onClick="@{() -> viewModel.retryCallback()}"
... />
到目前为止,我已经找到一种解决方法,我将其单独发布作为答案,但是我想知道是否可以直接调用此方法。
最佳答案
只需调用lambda的invoke
方法即可:
<Button
...
android:onClick="@{() -> viewModel.retryCallback.invoke()}"
... />