2015-04-25 5 views
7

Ich habe eine Variable in einem Fragment, deren Wert sich während des gesamten Fragmentlebens mehrfach ändern wird. Es wird von UI-Interaktionen ausgelöst, daher dachte ich, es wäre eine gute Idee, ein Observable zu verwenden, um es zu halten, anstatt alle zu aktualisierenden Ansichten als Felder zu machen und meine UI-Änderungen von einem Setter vorzunehmen.Ein RxJava geben Observable etwas, das von einer anderen Methode ausgegeben wird

Der Wert muss durch eine andere Methode aktualisiert werden (im Grunde eine Setter, die onNext() auf dem Abonnenten aufrufen sollte), nicht durch das Observable selbst. Gibt es eine Möglichkeit, dies mit RxJavas Design zu tun?

Mit anderen Worten, ich bin auf der Suche nach einem Observable-Feld, und geben Sie neue Werte zu emittieren (Aufruf onNext() auf seine Abonnenten) von einer anderen Methode in der Klasse.

Antwort

11

RxJava hat Subjects für diesen Zweck. Zum Beispiel:

private final PublishSubject<String> subject = PublishSubject.create(); 

public Observable<String> getUiElementAsObservable() { 
    return subject; 
} 

public void updateUiElementValue(final String value) { 
    subject.onNext(value); 
} 
+0

Das sieht aus, als was ich brauche! Wird zurück melden. –

+1

@ D_Steve595 wahrscheinlich ['BehaviorSubject'] (http://reactivex.io/RxJava/javadoc/rx/subjects/BehaviorSubject.html) passt mehr in Ihrem Fall –

+0

Das sieht perfekt aus, da ich manchmal das letzte bekommen muss emittierter Wert. Vielen Dank! –

Verwandte Themen