gpt4 book ai didi

android - CombineLatest 与 RxView.clicks

转载 作者:搜寻专家 更新时间:2023-11-01 09:39:33 28 4
gpt4 key购买 nike

我正在使用 Rxbinding 库来检测 TextView 上的点击和编辑框中的文本更改。我需要单击一个 TextView 或一个非空的编辑框,并检测我在两个可观察对象上使用 combinelatest 运算符,如下所示:

Observable<Void> obsPriceOnReq = RxView.clicks(vPriceOnReq).asObservable();
obsPriceOnReq.subscribe(new Action1<Void>() {
@Override
public void call(Void aVoid) {
mPriceOnReqBool = !mPriceOnReqBool; // Statement-1
// Do some work here.
});


Observable<String> obsBudget = RxTextView.textChanges(vProjectBudget).map(charseqToStr);
obsBudget.subscribe(new Action1<String>() {
@Override
public void call(String s) {
mBudgetFilledBool = checkPosDouble(s); // Statement-2
}
});

Observable.combineLatest(obsPriceOnReq, obsBudget, new Func2<Void, String, Boolean>() {
@Override
public Boolean call(Void aVoid, String s) {
return mBudgetFilledBool || mPriceOnReqBool; // Statement-3
}
}).subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
// Do some work here
}
});

问题是每当我点击 vPriceOnReq(TextView) 时,都不会调用 Statement-1,而只会调用 Statement-3。但每当我在 vProjectBudget(EditText) 中输入文本时,总是会调用 Statement-2Statement-3。有人可以帮助我了解我在这里做错了什么。

最佳答案

添加.replay(1).refCount()obsPriceOnReq 结束所以你将拥有:

Observable<Void> obsPriceOnReq = RxView.clicks(vPriceOnReq)
.asObservable()
.replay(1)
.refCount();

并使用obsPriceOnReq.withLatestFrom(obsBudget, new Func2<>...)而不是 .combineLatest()它会让你的应用程序只对点击使用react,并从 obsBudget 中获取最新的项目。 . About click based events in RxJava

关于android - CombineLatest 与 RxView.clicks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40625480/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com