イベントを取り扱う為の LiveData です。observe 開始時に過去のイベントが発火するのを防止します。
@MainThread
class LiveEvent<T> : LiveData<T>() {
init {
super.setValue(null)
}
@MainThread
override fun observe(owner: LifecycleOwner, observer: Observer<T>) {
val isFirst = AtomicBoolean(true)
super.observe(owner, Observer {
if (isFirst.getAndSet(false)) return@Observer
observer.onChanged(it)
})
}
@MainThread
public override fun setValue(t: T?) {
super.setValue(t)
}
}
ただこの実装だと、監視を開始後の初めの onStart()
前に発生したイベントは拾えないので注意です。