android - 如何在 RxJava 中链接具有不同间隔的可观察量?

标签 android rx-java delay reactivex

我看到很多关于让 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? 的答案有一列字母,其中两个字母中的一个字母是特殊的(也许为空?),但它似乎过于复杂。

最佳答案

序列: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));

last solution您链接的对于单独控制每个项目的延迟非常有用。

关于android - 如何在 RxJava 中链接具有不同间隔的可观察量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50201367/

相关文章:

android - 如何停止android应用程序kill上的所有服务,线程,卸载库

android - 使用 rxandroid 调用改造 api 时刷新身份验证 token

c - 通用微 Controller 延迟功能

javascript - jQuery 特色内容 slider ,每张幻灯片都有动画

javascript - 为什么 .delay() 不起作用?

Android 在表格行中添加 TextView

使用 AppCompat v23 和 API21 构建应用程序时 Android Studio 不工作

java - 如何每 15 秒运行一次计时器以及取消并重新启动计时器

android - 调试未收到消息的 RxJava 问题的最佳方法是什么

kotlin - 如何将挂起功能转换为 RX Single(或 Completable)?