2016-12-28 47 views
0

以下代碼使用Observable.from()發出列表中的項目。對於每個項目,flatMap()的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) 

不過,我認爲有這樣涉及我想你想,當用戶決定跳過來打斷他們沉重的計算。在這種情況下,我認爲您必須編寫自己的製作人,並在那裏聽取點擊以立即停止計算。