这是在 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)
}
}
}
WherefullTime
和controlCommands
are 分别Observable
发出关于当前开始时间的事件以倒计时并说明下一步该做什么。我想链接controlCommands
并能够保持状态开始,startTime
当事件出现时将倒计时,PLAY
出现时暂停,并在出现时PAUSE
重置。startTime
STOP
scan
几乎可以工作,但我不知道在计时器达到 0 后如何停止并且PLAY
仍然每秒发送一次,因为它会发送重复的信息。它也不允许状态和观察值之间的分离。因此,我累积的值scan
必须与内部值的类型相同Observable
(如果有意义的话)。
有什么想法我应该做什么?