我有一个按钮。如果用户多次按下它,我希望它仅在收到第一次点击时才运行一种方法。该方法完成运行并完成后,我想再次监听按钮的单击,仅在收到第一次单击时才执行操作...忽略其他单击(继续重复此操作)。如何使用RxJava 2做到这一点?我不想沿着firstElement()的方式使用东西,因为它会使按钮在第一次单击后不可用。谢谢!
答案 0 :(得分:0)
实际上,这不是最好的解决方案,但它可以提供帮助-您可以保存操作状态。像这样:
var isActionDone = true
buttonObservable
.filter { isActionDone }
.flatMap {
isActionDone = false
youActionCompletable
}
.subscribe { isActionDone = true }
答案 1 :(得分:0)
这是一种不需要辅助字段来跟踪任何内容的方法,但这不一定会使它变得更好。
clicks()
来自Jake Wharton的RxBinding library。您可以根据需要获得Observable
。
button.clicks()
// not strictly necessary, since we disable the button
.filter { button.isEnabled }
.doOnNext { button.isEnabled = false }
.observeOn(Schedulers.computation()) // or io() or whatever
.flatMap { doThing() }
.observeOn(AndroidSchedulers.mainThread())
// `each` instead of `next` so this also consumes errors
.doOnEach { button.isEnabled = true }
.subscribe()
private fun doThing(): Observable<Int> {
// simulate long-running op
Thread.sleep(2000)
// return any value; doesn't matter
return Observable.just(0)
}