我有应用程序,它有隐藏的调试菜单。我需要启用此秘密菜单,如果(Build.DEBUG
和)用户在一秒钟内点击一次视图,例如4次。
我想用这个RxJava。
我在weddingpartyapp尝试了Kaushik Gopal的DebouncedBuffer,但这会计算点击次数,如果在指定的时间段内没有点击,则返回值。
我通过使用简单的buffer()
达到了预期的效果,但是如果没有点击,它会开始缓冲并继续发出空列表。我可以添加filter()
,但我希望以不同的方式获得相同的结果。
我想在第一次点击后启动缓冲区,并按照提供的时间段(bufer()
?)收集所有点击次数(debounce()
?),然后停止缓冲。我找到了buffer(bufferOpenings, bufferClosingSelector)
我在Intro-To-RxJava中做了我需要的工作,并找到了使用示例
但这取决于interval()
。如何改变,这个,第一个可观测量将是群体中的第一个值,而功能是否会在第一个值一秒后触发?
此外,我找到了this answer,它增加了检查项目数量(这也会有所帮助,因为我可以在收到4次点击后停止Observable
),但是我可以在不创建新项目的情况下实现相同的效果Operator
?
答案 0 :(得分:2)
您找到的1 rows affected
是一个良好的开端,但您还需要buffer
将流分割成两个:一个将被缓冲以查看是否有4次点击而另一个将充当触发器用于打开具有时间限制的缓冲区:
publish
答案 1 :(得分:1)
这是我发现的一种简单方法:
fun <T> Observable<T>.debounceWithEvents(time:Long,timeUnit: TimeUnit) = takeUntil(debounce(time, timeUnit))
它将返回一个可观察到的事件,该事件发出所有事件,直到第一个事件被消除抖动为止。 希望这会有所帮助:)