1

这是在 Kotlin 中,但我认为任何编写 Java 的人都能理解。

我正在尝试用 Rx 制作秒表,但在实际停止和启动时遇到了一些麻烦。最大的问题是我不知道如何保持当前时间,同时随着不同的动作(开始和停止)进入而对其进行修改。这就是我现在所拥有的。

fullTime.switchMap { startTime ->
    controlCommands.switchMap { command ->
        when (command) {
            ControlState.PLAY -> Observable.interval(1L, TimeUnit.SECONDS).map {
                ControlState.PLAY
            }
            ControlState.PAUSE -> Observable.just(ControlState.PAUSE)
            else -> Observable.just(ControlState.STOP)
        }
    }
}

WherefullTimecontrolCommandsare 分别Observable发出关于当前开始时间的事件以倒计时并说明下一步该做什么。我想链接controlCommands并能够保持状态开始,startTime当事件出现时将倒计时,PLAY出现时暂停,并在出现时PAUSE重置。startTimeSTOP

scan几乎可以工作,但我不知道在计时器达到 0 后如何停止并且PLAY仍然每秒发送一次,因为它会发送重复的信息。它也不允许状态和观察值之间的分离。因此,我累积的值scan必须与内部值的类型相同Observable(如果有意义的话)。

有什么想法我应该做什么?

4

1 回答 1

0

如果我对您的理解正确,那么您就在正确的轨道上scan。您只需要

  • a.takeUntil(state -> state.hasCompleted)在您需要停止时停止(也许是 a takeWhile,这取决于)。
  • 然后 a.map(state -> state.getValute())获得价值

这有意义吗?

于 2017-05-31T05:43:43.083 回答