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