android - 从数据绑定 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()}"
... />
到目前为止,我找到了一个解决方法,我将单独发布作为答案,但我想知道我是否可以直接调用它。
解决方案
只需调用invoke
lambda 的方法:
<Button
...
android:onClick="@{() -> viewModel.retryCallback.invoke()}"
... />
推荐阅读
- android - 将图像发送到另一个活动
- vb.net - 组合框默认值,vb.net
- android - 无法使用 buildozer 构建 APK 文件。Unicode解码错误
- sql - 在多表多数据库中选择
- firebase - 错误 - 使用 ionic v3 更新 firebase 数据库中的用户名
- go - 如何解决“未知转义序列(以及另外 2 个错误)”的错误
- javascript - 如何使用 setTimeout 来限制获取请求中的时间?
- c# - 有什么方法可以避免实现 ICommand 以在 MVVM 中使用 Button?
- javascript - 如何在 javascript 的节点列表中使用 .map()?
- javascript - 在动态生成的输入上添加 CKEDITOR