按下按钮后强制onNext()

时间:2016-12-28 23:51:14

标签: rx-java

以下代码使用Observable.from()从列表中发出项目。对于每个项目,使用来自flatMap()的{​​{1}}执行maxConcurrent值为1的Observabledevide.connectForPolice()方法对当前项执行许多操作,并最终调用device.connectForPolice()以继续下一个项目。这是代码:

Observable.just()

当此代码开始运行时,我将在屏幕上添加一个按钮,点击后我想“强制”原始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); } } }); 中的当前项目完成,以便列表中的下一个项目可以通过链条。它本质上是一个“跳过”或“完成”按钮。将其整合到这一系列事件中的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

这取决于您想要实现的确切行为。如果足以忽略device.connectForPolice(device.getName())的结果,则解决方案是微不足道的。只需将此流与另一个流合并,即表示此跳过按钮的点击次数,只占用1个项目,以先到者为准。

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

但是,我认为涉及大量计算,因此我认为您希望在用户决定跳过时中断它们。在这种情况下,我认为您必须编写自己的制作人并在其中监听点击以立即停止计算。