首页 > 解决方案 > BindingAdapter 中的 LiveData 观察者

问题描述

可以BindingAdapter使用LiveDataObserver 调用吗?我需要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。

标签: androidandroid-lifecycleandroid-livedata

解决方案


当您使用BindingAdapterwith 时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)
    ...
}

推荐阅读