【发布时间】:2018-10-16 12:03:00
【问题描述】:
我看到很多关于让Rx 延迟事件的每次发射的帖子:How to make countdown timer with RxJS Observables?、How to use RxJava Interval Operator、Adding delay between Observable Items RxJava、RxJava delay for each item of list emitted 等。
不过,我没有看到任何具有不同延迟的链接。
基本上,我有一个 Textview 和一个字母列表,我想:
- 将文本设置为第一个字母
- 等待 1500 毫秒
- 将文本设置为空
- 等待 500 毫秒
- 将文本设置为第二个字母
- 等待 1500 毫秒
- 将文本设置为空
- 等待 500 毫秒
- 重复整个列表
代码实现可能看起来像这样(但我猜doThing() 在Rx 中是无稽之谈,而delay() 不是为了这个):
Observable.fromArray(new String[]{"A", "B", "C", "D", "E"})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.delay(500L, TimeUnit.MILLISECONDS)
.doThing((String i) -> {
textView.setText("");
Log.d("XXX", "MainActivity :: onCreate (110): letter="+ i);
})
.delay(1500L, TimeUnit.MILLISECONDS)
.doThing((String i) -> {
textView.setText(i);
Log.d("XXX", "MainActivity :: onCreate (110): letter="+ i);
});
如何使用 Rx 实现这一点?
编辑:我可以将rxjava delay: How to get variable delay on each item emitted from a list? 的答案与字母列表一起使用,其中一个字母对两个是特殊的(可能是空?),但它似乎过于复杂。
【问题讨论】:
-
您可以尝试使用 zip 或 concat map。基本上你有两个 observables,一个用于数据,一个用于延迟(交替 500/1500 延迟)。然后你把它们结合在一起。 (是的,这是你最后一个链接的答案)
-
@AngelKoh 你的意思是我在编辑或介绍中的最后一个链接?如果在我的编辑中,我认为这样一个常见的任务可以以一种不那么乏味的方式完成。如果在我的介绍中,你能提供一个小例子作为答案吗?这对我有很大帮助!
标签: android rx-java delay reactivex