如何从扩展功能中的匿名功能访问“ this”?

时间:2019-06-29 16:30:59

标签: android kotlin

我想为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对象。相反,我想引用观察者以将其删除。我该怎么解决?

1 个答案:

答案 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)
        }
    })
}