当用户使用 rxbinding 和 rxjava 重复点击获取数据按钮时不要重新执行请求
don't re-execute request while user is clicking repeatedly on fetch data button using rxbinding and rxjava
我有一个 RxView 并且我已经设置了点击观察器,我不想每次点击总是发出新的请求。
我想要的是在仅使用 Rxjava 和 Rxbinding 进行获取数据请求时忽略用户点击。
button.clicks()
.flatMapSingle {
Completable.fromCallable {
usersViewModel.users(emptyList())
}
.andThen(Request.users())
}
.doOnNext {
Toast
.makeText(this, R.string.users_updated, Toast.LENGTH_LONG)
.show()
}
.subscribe(usersViewModel::users) { Log.e(this::class.java.name, it.message, it) }
除了ThrottleFirst还有什么办法吗?
禁用和重新启用按钮要简单得多,但您可以使用背压:
button.clicks()
.toFlowable(BackpressureStrategy.DROP)
.flatMapSingle ({
Completable.fromCallable {
usersViewModel.users(emptyList())
}
.andThen(Request.users())
}, false, 1)
.doOnNext {
Toast
.makeText(this, R.string.users_updated, Toast.LENGTH_LONG)
.show()
}
.subscribe(usersViewModel::users) {
Log.e(this::class.java.name, it.message, it)
}
我有一个 RxView 并且我已经设置了点击观察器,我不想每次点击总是发出新的请求。 我想要的是在仅使用 Rxjava 和 Rxbinding 进行获取数据请求时忽略用户点击。
button.clicks()
.flatMapSingle {
Completable.fromCallable {
usersViewModel.users(emptyList())
}
.andThen(Request.users())
}
.doOnNext {
Toast
.makeText(this, R.string.users_updated, Toast.LENGTH_LONG)
.show()
}
.subscribe(usersViewModel::users) { Log.e(this::class.java.name, it.message, it) }
除了ThrottleFirst还有什么办法吗?
禁用和重新启用按钮要简单得多,但您可以使用背压:
button.clicks()
.toFlowable(BackpressureStrategy.DROP)
.flatMapSingle ({
Completable.fromCallable {
usersViewModel.users(emptyList())
}
.andThen(Request.users())
}, false, 1)
.doOnNext {
Toast
.makeText(this, R.string.users_updated, Toast.LENGTH_LONG)
.show()
}
.subscribe(usersViewModel::users) {
Log.e(this::class.java.name, it.message, it)
}