Advertisement
Guest User

SingleLiveEvent

a guest
Jul 1st, 2021
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 0.94 KB | None | 0 0
  1. class SingleLiveEvent<T> : MutableLiveData<T>() {
  2.     private val pending = AtomicBoolean(false)
  3.     @MainThread
  4.     override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
  5.         if (hasActiveObservers()) {
  6.             Log.w(TAG, "Multiple observers registered but only one will be notified of changes.")
  7.         }
  8.         // Observe the internal MutableLiveData
  9.         super.observe(owner, { t ->
  10.             if (pending.compareAndSet(true, false)) {
  11.                 observer.onChanged(t)
  12.             }
  13.         })
  14.     }
  15.  
  16.     @MainThread
  17.     override fun setValue(t: T?) {
  18.         pending.set(true)
  19.         super.setValue(t)
  20.     }
  21.  
  22.     operator fun invoke(t: T?){
  23.         value = t
  24.     }
  25.  
  26.     /**
  27.      * Used for cases where T is Void, to make calls cleaner.
  28.      */
  29.     @MainThread
  30.     fun call() {
  31.         value = null
  32.     }
  33.     companion object {
  34.         private const val TAG = "SingleLiveEvent"
  35.     }
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement