BindingAdapter 中的 LiveData Observer

LiveData Observer in BindingAdapter

可以通过 LiveData 观察者调用进行 BindingAdapter 吗? 我需要 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。

当您将 BindingAdapterLiveData 一起使用时,您不会将 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}
    ...

MyViewModel.kt

class MyViewModel {
    ...
    val progressBarVisibility = MutableLiveData<Boolean>(true)
    ...
}