Skip to content

Instantly share code, notes, and snippets.

@Drjacky
Created November 7, 2018 15:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Drjacky/31dc96ba1a88b66ab9091286b800b5d2 to your computer and use it in GitHub Desktop.
Save Drjacky/31dc96ba1a88b66ab9091286b800b5d2 to your computer and use it in GitHub Desktop.
Custom MutableLiveData that operate just once.
class OperationLiveData<T>(private val operation: OperationLiveData<T>.() -> Unit) : MutableLiveData<T>() {
private var operated = AtomicBoolean(false)
override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
super.observe(owner, observer)
operate()
}
override fun observeForever(observer: Observer<in T>) {
super.observeForever(observer)
operate()
}
private fun operate() {
if (value != null && operated.get()) {
return
}
operation()
operated.set(true)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment