1

It's possible to make BindingAdapter with LiveData Observer call? I need LifecycleOwner to call LiveData Observer.

The BindingAdapter:

@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} show that I need to put a LifecycleOwner on LiveData observe Call.

felipe.rce
  • 237
  • 2
  • 8
  • 35

1 Answers1

2

When you use BindingAdapter with LiveData, you don't put LiveData as a parameter. Just put livedata's type directly.

@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)
    ...
}
Sanlok Lee
  • 3,404
  • 2
  • 15
  • 25