Android LiveData prevent receive the last value on observe

后端 未结 12 1304
自闭症患者
自闭症患者 2020-11-27 04:41

Is it possible to prevent LiveData receive the last value when start observing? I am considering to use LiveData as events.

For example eve

12条回答
  •  一向
    一向 (楼主)
    2020-11-27 05:34

    Just ignore data before android.arch.lifecycle.LiveData#observe function called.

    class IgnoreHistoryLiveData : MutableLiveData() {
        private val unactivedObservers = LinkedBlockingQueue>()
        override fun observe(owner: LifecycleOwner, observer: Observer) {
            val wo = WrapperObserver(observer)
            unactivedObservers.add(wo)
            super.observe(owner, wo)
        }
    
    
        override fun setValue(value: T) {
            while (unactivedObservers.isNotEmpty()) {
                unactivedObservers.poll()?.actived = true
            }
            super.setValue(value)
        }
    }
    
    private class WrapperObserver(private val origin: Observer) : Observer {
        var actived = false
        override fun onChanged(t: T?) {
            if (actived) {
                origin.onChanged(t)
            }
        }
    }
    

提交回复
热议问题