首页 文章

使用RxJava重复对状态的操作

提问于
浏览
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)
        }
    }
}

其中 fullTimecontrolCommandsObservable ,它们分别发出关于当前开始时间的事件以倒数并说明下一步做什么 . 我希望链接 controlCommands 并能够保持状态从 startTime 开始,当 PLAY 事件出现时将倒计时, PAUSE 出现时暂停,当 STOP 出现时重置为 startTime .

scan 几乎可以工作,但我不知道如何在计时器命中0后停止,并且每秒仍然会发送 PLAY ,因为它将发送重复信息 . 此外,它不允许状态和观察值之间的分离 . 所以我用 scan 积累的值必须与 Observable 中的值相同(如果这是有道理的) .

任何想法我应该做什么?

1 回答

  • -1

    如果我理解正确的话,你就会走上正确的轨道 scan . 您只需要

    • a .takeUntil(state -> state.hasCompleted) 在需要停止时停止(ow可能是 takeWhile ,这取决于) .

    • 然后 .map(state -> state.getValute()) 获取值

    这有意义吗?

相关问题