publicclassSingleLiveEventextendsMutableLiveData{
privatestaticfinalStringTAG="SingleLiveEvent";
privatefinalAtomicBooleanmPending=newAtomicBoolean(false);
@MainThread
publicvoidobserve(LifecycleOwnerowner,finalObserverobserver) {
if(hasActiveObservers()) {
Log.w(TAG,"Multiple observers registered but only one will be notified of changes.");
}
//Observe the internal MutableLiveData
super.observe(owner,newObserver() {
@Override
publicvoidonChanged(@NullableTt) {
if(mPending.compareAndSet(true,false)) {
observer.onChanged(t);
}
}
});
}
@MainThread
publicvoidsetValue(@NullableTt) {
mPending.set(true);
super.setValue(t);
}
/**
* Used for cases where T is Void, to make calls cleaner.
*/
@MainThread
publicvoidcall() {
setValue(null);
}
}
网友评论