使用Rxjava检测值更改

Deb*_*ebu 6 java android rx-java

我们可以检测是否使用RxJava更改了类成员值?在类中说有一个变量var,现在只要var的值使用RxJava改变就可以得到通知.

Sia*_*oli 16

你可以使用这样的东西:

private final BehaviorSubject<Integer> subject = BehaviorSubject.create();
private Integer value=0;

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

public void updateUiElementValue(final Integer valueAdded) {
    synchronized (value) {
        if (value + valueAdded < 0)
            return;
        value += valueAdded;
        subject.onNext(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

并订阅它像这样:

compositeSubscription.add(yourClass.getUiElementAsObservable()
            .subscribe(new Action1<Integer>() {
                @Override
                public void call(Integer userMessage) {
                    setViews(userMessage,true);
                }
            }));
Run Code Online (Sandbox Code Playgroud)

你必须为你想要订阅他们的更改的所有变量创建setter,如果应用了更改,则调用onNext.

********更新

当观察者订阅BehaviorSubject时,它首先发出源Observable最近发出的项

你可以在这里看到其他类型的主题:http://reactivex.io/documentation/subject.html

一些有用的链接:关于反应式编程:https ://gist.github.com/staltz/868e7e9bc2a7b8c1f754和关于rxjava:https://youtu.be/k3D0cWyNno4


小智 5

http://rxmarbles.com/#distinctUntilChanged

代码

Observable.just("A", "B", "B", "A", "C", "A", "A", "D")
    .distinctUntilChanged()
    .subscribe(abc -> Log.d("RXJAVA", abc));
Run Code Online (Sandbox Code Playgroud)

结果

A
B
A
C
A
D
Run Code Online (Sandbox Code Playgroud)