Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SingleLiveEvent<T> : MutableLiveData<T>() {
- private val mPending = AtomicBoolean(false)
- @MainThread
- override fun observe(owner: LifecycleOwner, observer: Observer<T>) {
- if (hasActiveObservers()) {
- Log.w(TAG, "Multiple observers registered but only one will be notified of changes.")
- }
- // Observe the internal MutableLiveData
- super.observe(owner, Observer<T> { t ->
- if (mPending.compareAndSet(true, false)) {
- observer.onChanged(t)
- }
- })
- }
- @MainThread
- override fun setValue(@Nullable t: T?) {
- mPending.set(true)
- super.setValue(t)
- }
- /**
- * Used for cases where T is Void, to make calls cleaner.
- */
- @MainThread
- fun call() {
- value = null
- }
- companion object {
- private const val TAG = "SingleLiveEvent"
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement