CombineLatest с RxView.clicks

Я использую библиотеку Rxbinding для обнаружения кликов по текстовому представлению и текстовых изменений в поле редактирования. Мне нужно либо щелкнуть текстовое представление, либо непустое поле редактирования, а также определить, что я использую оператор 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-2, а также Statement-3. Может кто-нибудь, пожалуйста, помогите мне понять, что я делаю неправильно здесь.


person user2601981    schedule 16.11.2016    source источник


Ответы (1)


добавьте .replay(1).refCount() в конец obsPriceOnReq, чтобы у вас было:

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

и используйте obsPriceOnReq.withLatestFrom(obsBudget, new Func2<>...) вместо .combineLatest(), это заставит ваше приложение реагировать только на клики и берет последний элемент из obsBudget. О событиях на основе кликов в RxJava

person borichellow    schedule 16.11.2016