【问题标题】:Forcing onNext() upon button click在按钮单击时强制 onNext()
【发布时间】:2016-12-29 16:01:37
【问题描述】:

以下代码使用Observable.from() 从列表中发出项目。对于每个项目,使用来自devide.connectForPolice()Observable 执行maxConcurrent 值为1 的flatMap()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);
                        }
                    }
                });

当此代码开始运行时,我将在屏幕上添加一个按钮,单击后我想“强制”原始 Observable.from(mAdapter.getItems()) 中的当前项目完成,以便列表中的下一个项目可以通过连锁,链条。它本质上是一个“跳过”或“完成”按钮。将其整合到这个事件链中的最佳方式是什么?

【问题讨论】:

    标签: rx-java


    【解决方案1】:

    这取决于您想要实现的确切行为。如果忽略device.connectForPolice(device.getName()) 的结果就足够了,那么解决方案就是微不足道的。只需将此流与代表单击此跳过按钮的另一个流合并,并仅获取一项,以先到者为准。

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

    但是,我假设其中涉及大量计算,因此我认为您想在用户决定跳过时中断它们。在这种情况下,我认为您必须编写自己的生产者并在那里监听点击以立即停止计算。

    【讨论】:

      猜你喜欢
      • 2013-02-16
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多