1
這是在Kotlin,但我認爲任何編寫Java的人都能理解。用RxJava重複對狀態的操作
我想用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)
}
}
}
凡fullTime
和controlCommands
是Observable
s表示發出關於當前起始時間來算,從下來,說分別下一步要做什麼,活動。我想鏈接controlCommands
並能夠保持狀態從startTime
開始,當PLAY
事件出現時將倒計時,當出現PAUSE
時暫停,當出現STOP
時重置爲startTime
。
scan
幾乎可以工作,但我不知道如何在計時器點擊0後停止,並且PLAY
仍然每秒發送一次,因爲它會發送重複信息。它也不允許狀態和觀察值之間的分離。因此,我積累的值scan
必須與Observable
內的值相同(如果有意義的話)。
任何想法我應該做什麼?
是否會導致訂閱完成,還是會在新的命令/時間到來時繼續? – mrobinson7627
'.takeUntil'將導致訂閱終止 - 當條件滿足時,它將從父母取消訂閱。 –
所以這並不是我想要的,因爲我想繼續觀察'fullTime'和'controlCommands'。 – mrobinson7627