使用Rxjava检测值更改

时间:2016-07-05 12:13:08

标签: java android rx-java

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

2 个答案:

答案 0 :(得分:15)

您可以使用以下内容:

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);
    }
}

并订阅它:

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

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

**** **** UPDATE

  

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

您可以在此处查看其他类型的主题:http://reactivex.io/documentation/subject.html

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

答案 1 :(得分:4)

http://rxmarbles.com/#distinctUntilChanged

代码

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

结果

A
B
A
C
A
D