私はRxbindingライブラリを使用して、エディットボックス内のテキストビューとテキスト変更のクリックを検出しています。 、RxView.clicksと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)をクリックしたときに問題がある:私はどちらかのTextViewがクリックされたか、空でないエディットボックスと以下のように2つの観測に私はcombinelatest演算子を使用していたことを検出するために持っている必要がありますステートメント1は呼び出されず、ステートメント-3が呼び出されます。しかし、vProjectBudget(EditText)にテキストを入力すると、ステートメント-2とステートメント-3が常に呼び出されます。誰かが私がここで間違っていることを理解するのを助けてくれますか?
Observable<Void> obsPriceOnReq = RxView.clicks(vPriceOnReq)
.asObservable()
.replay(1)
.refCount();
をし、それはあなたがアプリをクリックに対してのみ反応し、obsBudget
から最新のアイテムを取るようになりますobsPriceOnReq.withLatestFrom(obsBudget, new Func2<>...)
の代わり.combineLatest()
を使用します。