我想为LiveData写一个扩展函数,其中onChanged仅被调用一次,然后删除观察者。
@MainThread
fun <T> LiveData<T>.observeOnce(owner: LifecycleOwner, observer: Observer<T>) {
this.observe(owner, Observer {
observer.onChanged(it)
this.removeObserver(this)
})
}
该代码无法编译,因为关键字“ this”是指此功能扩展中的LiveData对象。相反,我想引用观察者以将其删除。我该怎么解决?
答案 0 :(得分:0)
您不能为此使用lambda,您必须这样做
fun <T> LiveData<T>.observeOnce(owner: LifecycleOwner, observer: Observer<T>) {
this.observe(owner, object : Observer<T> {
override fun onChanged(t: T) {
observer.onChanged(t)
removeObserver(this)
}
})
}