我正在努力理解如何正确使用RxBinding
,如果我想在用户向下滑动 a 时调用网络请求SwipeRefreshLayout
,我希望说类似的话
RxSwipeRefreshLayout.refreshes(swipeContainer)
.flatMap { networkRequest() }
.subscribeBy(
onNext = { list: List<Data> -> Timber.d(data) },
onError = { showErrorSnackbar(it) },
onComplete = { Timber.d("On Complete") })
但这对我不起作用,因为我将它包装在一个调用的函数setupSwipeRefresh()
中,我调用它onStart
,所以一旦onStart
调用网络请求就会发出,因为那是订阅布局的时候。
现在我不确定该怎么做。我可以把整个东西都放进去,refreshListener
但这违背了RxBinding
.
或者我可以执行networkRequest
. 但它看起来像onNext
swipeContainer
RxSwipeRefreshLayout.refreshes(swipeContainer)
.subscribeBy(
onNext = {
networkRequest()
.subscribeBy(
onNext = { list: List<Data> ->
Timber.d(data)
})
},
onError = { showErrorSnackbar(it) },
onComplete = { Timber.d("On Complete") })
但是两次调用 subscribe 似乎是一种反模式,所以是的,因为SwipeRefreshLayout
在RxBinding
库中,所以必须有一种惯用的方式来执行此操作,因为它似乎是最常见的用例。