问题
Probably a noob question. How do I set a default value to a BehaviourSubject.
I have an enum with 2 different values
enum class WidgetState {
HIDDEN,
VISIBLE
}
And a behaviour subject which emits the states
val widgetStateEmitter: BehaviorSubject<WidgetState> = BehaviorSubject.create()
My emitter starts emitting when the view logic is written. However it's HIDDEN by default. How do I set the default value as WidgetState.HIDDEN to my emitter widgetStateEmitter?
回答1:
There's a static BehaviorSubject.createDefault(T defaultValue) factory method that allows to set the initial value.
The Javadoc for the defaultValue parameter says:
defaultValue- the item that will be emitted first to anyObserveras long as theBehaviorSubjecthas not yet observed any items from its sourceObservable
So you just have to create your BehaviorSubject as follows:
val widgetStateEmitter: BehaviorSubject<WidgetState> =
BehaviorSubject.createDefault(HIDDEN)
回答2:
When Subscribing to this Subject you can use Start with Operator
widgetStateEmitter.startWith(HIDDEN)
//continue your chain
回答3:
In your constructor or onCreate (or similar) just call widgetStateEmitter.onNext(HIDDEN)
来源:https://stackoverflow.com/questions/52050555/how-to-set-default-value-in-behavioursubject