2

テキストビューのクリックと編集ボックスのテキスト変更を検出するために Rxbinding ライブラリを使用しています。textview をクリックするか、空でない編集ボックスを使用し、以下のように 2 つのオブザーバブルで 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が常に呼び出されます。誰かが私がここで間違っていることを理解するのを手伝ってくれますか?

4

1 に答える 1

2

.replay(1).refCount()の最後に追加すると、次のobsPriceOnReq ようになります。

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

obsPriceOnReq.withLatestFrom(obsBudget, new Func2<>...)代わりに使用.combineLatest()すると、アプリはクリックに対してのみ反応し、から最新のアイテムを取得しますobsBudgetRxJava でのクリックベースのイベントについて

于 2016-11-16T11:53:24.370 に答える