【发布时间】:2017-09-30 08:47:19
【问题描述】:
我很难理解如何正确使用RxBinding,如果我想在用户向下滑动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 的目的。
或者我可以在swipeContainer 的onNext 中执行networkRequest。但它看起来像
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 库中,所以必须有一种惯用的方式来执行此操作,因为它似乎是最常见的用例。
【问题讨论】:
标签: android kotlin rx-java swiperefreshlayout rx-binding