在SwipeRefreshLayout上使用RxBinding刷新的惯用方法是什么?

时间:2017-09-30 08:47:20

标签: android kotlin rx-java swiperefreshlayout rx-binding

我很难理解如何正确使用language: java sudo: true dist: trusty jdk: oraclejdk9 addons: apt: packages: - oracle-java9-installer before_install: - chmod +x mvnw ,如果我想在用户向下按RxBinding时调用网络请求,我希望会说出类似< / p>

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的{​​{1}}中的networkRequest。但那时它看起来像

onNext

但是两次调用subscribe似乎就像一个反模式, 所以,是的,因为swipeContainer RxSwipeRefreshLayout.refreshes(swipeContainer) .subscribeBy( onNext = { networkRequest() .subscribeBy( onNext = { list: List<Data> -> Timber.d(data) }) }, onError = { showErrorSnackbar(it) }, onComplete = { Timber.d("On Complete") }) 库中,所以必须有一种惯用的方法,因为它似乎是最常见的用例。

1 个答案:

答案 0 :(得分:0)

你正在寻找这样的东西:

interface State { }

class IsLoading implements State { }

class LoadingResult implements State {
    private final List<String> result;
    public LoadingResult(List<String> result) {
        this.result = result;
    }
}

活动

{{1}}

SwitchMap与FlatMap类似,但它会切换到新的observable并从上级可观察中丢弃事件。