android - 如何在 RxJava 中以不同的间隔链接 observables?
问题描述
我看到很多关于Rx
延迟事件的每次发射的帖子:如何使用 RxJS Observables 制作倒数计时器?,如何使用 RxJava 间隔运算符,在 Observable Items RxJava 之间添加延迟,为每个发出的列表项添加 RxJava 延迟等。
不过,我没有看到任何具有不同延迟的链接。
基本上,我有一个 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 延迟的答案:如何获得从列表发出的每个项目的可变延迟?有一个字母列表,其中一个字母对两个是特殊的(可能是空的?),但它似乎过于复杂。
解决方案
顺序: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));
您链接的最后一个解决方案对于分别控制每个项目的延迟非常有用。
推荐阅读
- hibernate - 防止休眠以记录敏感日期
- python - 动态透视表的有效方法
- memory - JNI API DestroyJavaVM 后 JVM 使用的空闲内存
- c# - 当我尝试使用 git push origin 显示它时,处理标准输出在 c# 中不起作用
- c - 我无法使用链表打印多项式表达式
- javascript - 使我的函数更可重用的提示
- sql-server - SQL 登录已创建但未映射 - 用户已存在 - 之间是否有任何联系?
- ios - 如何快速获取集合视图的当前索引路径
- pytorch - 从列表而不是文件创建 SequenceTaggingDataset
- python - OpenCv错误无法通过视频捕获打开相机