android - BindingAdapter 中的 LiveData 观察者
问题描述
可以BindingAdapter
使用LiveData
Observer 调用吗?我需要LifecycleOwner
打电话给 LiveData Observer。
绑定适配器:
@BindingAdapter("app:progressBarObserver")
fun setProgressBarObserver(progressBar: ProgressBar, observer: MutableLiveData<Boolean>) {
observer.observe({lifecycle_here}, Observer {
if (it) {
progressBar.visibility = View.VISIBLE
} else {
progressBar.visibility = View.GONE
}
})
}
{lifecycle_here}
表明我需要在 LiveData 观察调用上放置一个 LifecycleOwner。
解决方案
当您使用BindingAdapter
with 时LiveData
,您不会将LiveData
其作为参数。直接输入livedata的类型就行了。
@BindingAdapter("app:progressBarObserver")
fun setProgressBarObserver(progressBar: ProgressBar, isVisible: Boolean) {
if (isVisible) {
progressBar.visibility = View.VISIBLE
} else {
progressBar.visibility = View.GONE
}
}
layout_my.xml
<ProgressBar
...
app:progressBarObserver=@{viewModel.progressBarVisibility}
...
我的视图模型.kt
class MyViewModel {
...
val progressBarVisibility = MutableLiveData<Boolean>(true)
...
}
推荐阅读
- python - python subprocess.run() 返回 AttributeError: 'module' object has no attribute 'run'
- google-cloud-platform - 尝试使用 RISC API 注册接收器端点时被禁止 403
- azure - 使用 python Azure SDK 在流量管理器中添加端点
- sql - 我可以使用 WITH clausule 创建表作为选择吗
- ios - 使用本机反应获取来自 CameraRoll iOS 的 PHAsset 的路径
- sql-server - Postgres sql表返回语句
- node.js - 在 Angular 应用程序中安装节点模块时出错
- javascript - 如何在反应中以两种方式绑定数据输入?
- php - PayPal 订单 API 架构
- docusignapi - DocuSign JWT 授权流程 Consent_Required 获得一揽子同意