如何在 RxJava 中以不同的间隔链接可观察对象?
How to chain observables with different intervals in RxJava?
我看到很多帖子 Rx
延迟事件的每次发射:, , , ,以及其他。
不过,我没有看到任何具有不同延迟的链接。
基本上,我有一个 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 实现此目的?
编辑:我可以将 的答案与一个字母列表一起使用,其中两个字母中的一个字母是特殊的(可能为空?),但它似乎过于复杂。
序列:A (1500ms) null (500ms) B (1500ms) null (500ms) C (500ms) null (1500ms)
textAnimationDisposable = Observable.fromArray("A", "B", "C")
.concatMap(string ->
Observable.merge(
Observable.just(string),
Observable.just("").delay(1500, TimeUnit.MILLISECONDS)
)
.concatWith(Observable.<String>empty().delay(500, TimeUnit.MILLISECONDS))
)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.newThread())
.subscribe(string -> textView.setText(string));
您链接的 对于单独控制每个项目的延迟非常有用。
我看到很多帖子 Rx
延迟事件的每次发射:
不过,我没有看到任何具有不同延迟的链接。
基本上,我有一个 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 实现此目的?
编辑:我可以将
序列:A (1500ms) null (500ms) B (1500ms) null (500ms) C (500ms) null (1500ms)
textAnimationDisposable = Observable.fromArray("A", "B", "C")
.concatMap(string ->
Observable.merge(
Observable.just(string),
Observable.just("").delay(1500, TimeUnit.MILLISECONDS)
)
.concatWith(Observable.<String>empty().delay(500, TimeUnit.MILLISECONDS))
)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.newThread())
.subscribe(string -> textView.setText(string));
您链接的