使用RxJava捕获在时间跨度内的用户点击次数

时间:2015-12-16 20:17:29

标签: android buffer rx-java rx-android

我有应用程序,它有隐藏的调试菜单。我需要启用此秘密菜单,如果(Build.DEBUG和)用户在一秒钟内点击一次视图,例如4次。 我想用这个RxJava。

我在weddingpartyapp尝试了Kaushik Gopal的DebouncedBuffer,但这会计算点击次数,如果在指定的时间段内没有点击,则返回值。

我通过使用简单的buffer()达到了预期的效果,但是如果没有点击,它会开始缓冲并继续发出空列表。我可以添加filter(),但我希望以不同的方式获得相同的结果。

我想在第一次点击后启动缓冲区,并按照提供的时间段(bufer()?)收集所有点击次数(debounce()?),然后停止缓冲。我找到了buffer(bufferOpenings, bufferClosingSelector) enter image description here

我在Intro-To-RxJava中做了我需要的工作,并找到了使用示例 但这取决于interval()。如何改变,这个,第一个可观测量将是群体中的第一个值,而功能是否会在第一个值一秒后触发?

此外,我找到了this answer,它增加了检查项目数量(这也会有所帮助,因为我可以在收到4次点击后停止Observable),但是我可以在不创建新项目的情况下实现相同的效果Operator

2 个答案:

答案 0 :(得分:2)

您找到的1 rows affected是一个良好的开端,但您还需要buffer将流分割成两个:一个将被缓冲以查看是否有4次点击而另一个将充当触发器用于打开具有时间限制的缓冲区:

publish

答案 1 :(得分:1)

这是我发现的一种简单方法:

fun <T> Observable<T>.debounceWithEvents(time:Long,timeUnit: TimeUnit) = takeUntil(debounce(time, timeUnit))

它将返回一个可观察到的事件,该事件发出所有事件,直到第一个事件被消除抖动为止。 希望这会有所帮助:)