2016-11-16 4 views
1

私は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()を使用します。

答えて

関連する問題