2016-12-28 11 views
0

次のコードは、Observable.from()を使用してリストからアイテムを発行します。各項目では、のmaxConcurrent値が1で、Observabledevide.connectForPolice()で実行されます。 device.connectForPolice()メソッドは、現在の項目に対して多くの操作を実行し、最終的にObservable.just()を呼び出して次の項目に移動します。ここでは、コードは次のようになります。ボタンをクリックしたときにonNext()を強制的に実行する

mConnectingSubscription = Observable.from(mAdapter.getItems()) 
       .flatMap(device -> { 
        return device.connectForPolice(device.getName()); 
       }, 1) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Subscriber<String>() { 
        @Override 
        public void onCompleted() {} 

        @Override 
        public void onError(Throwable e) {} 

        @Override 
        public void onNext(String s) { 
         if (s.contains("str")) { 
          mAdapter.removeItem(s); 
         } 
        } 
       }); 

このコードを実行し始めたとき、私は、画面にボタンを追加することになり、クリックすると、私は、元Observable.from(mAdapter.getItems())から「力」現在の項目はので、次を完了するためにしたいと思いますリスト内のアイテムはチェーンを通過できます。基本的に「スキップ」または「終了」ボタンです。それをこの一連のイベントに統合する最良の方法は何ですか?

答えて

0

これは、達成したいと思う正確な動作によって異なります。 device.connectForPolice(device.getName())の結果を無視するだけで十分であれば、その解決法は簡単です。このストリームをこのスキップボタンのクリックを表す別のものとマージし、1つだけの項目のどちらか早い方を取得します。

.flatMap(device -> { 
    return device.connectForPolice(device.getName()) 
       .mergeWith(RxView.clicks(skipBtn).map(voidObject -> someString)) 
       .take(1); 
}, 1) 

しかし、計算が複雑であると想定して、ユーザーがスキップすることを決定したときに中断したいと思っています。その場合は、自分でプロデューサーを作成してクリックを聞いてすぐに計算を停止する必要があります。

関連する問題