Rx java 单击按钮时强制执行onNext()
下面的代码使用Rx java 单击按钮时强制执行onNext(),rx-java,Rx Java,下面的代码使用Observable.from()从列表中发出项目。对于每个项目,将使用来自devide.connectForPolice()的可观察的执行maxConcurrent值为1的flatMap()。device.connectForPolice()方法对当前项执行许多操作,并最终调用Observable.just()以转到下一项。代码如下: mConnectingSubscription=Observable.from(mAdapter.getItems()) .flatMap(设备-
Observable.from()
从列表中发出项目。对于每个项目,将使用来自devide.connectForPolice()
的可观察的执行maxConcurrent值为1的flatMap()
。device.connectForPolice()
方法对当前项执行许多操作,并最终调用Observable.just()
以转到下一项。代码如下:
mConnectingSubscription=Observable.from(mAdapter.getItems())
.flatMap(设备->{
返回device.connectForPolice(device.getName());
}, 1)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新订户(){
@凌驾
已完成的公共void(){}
@凌驾
公共无效者(可抛弃者){}
@凌驾
public void onNext(字符串s){
如果(s.包含(“str”)){
移动设备(s);
}
}
});
当此代码开始运行时,我将在屏幕上添加一个按钮,单击后,我希望“强制”当前项从原始的Observable.from(mAdapter.getItems())
完成,以便列表中的下一项可以通过该链。它本质上是一个“跳过”或“完成”按钮。将其整合到事件链中的最佳方式是什么?这取决于您想要实现的确切行为。如果忽略device.connectForPolice(device.getName())
的结果就足够了,那么解决方案就很简单了。只需将此流与另一个表示单击此跳过按钮的流合并,并仅获取1项,以先到者为准
.flatMap(device -> {
return device.connectForPolice(device.getName())
.mergeWith(RxView.clicks(skipBtn).map(voidObject -> someString))
.take(1);
}, 1)
但是,我假设其中涉及大量计算,因此我认为当用户决定跳过时,您希望中断这些计算。在这种情况下,我认为您必须编写自己的制作人,并在那里收听点击,以立即停止计算