RxBinding:RxSearchView 的一个 rx 序列中的不同去抖动可观察量?

RxBinding: different debounced observables within one rx-sequence for RxSearchView?

我正在使用 RxBinding2 来侦听 SearchView 中的文本更改。当用户在 EditText 中键入 smth 时,我需要使用具有不同去抖动的单独逻辑。我试过这个:

    RxSearchView.queryTextChanges(searchView)
            .debounce(500, TimeUnit.MILLISECONDS) // use debounce 
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(query -> mPresenter.searchRequest(query));
    RxSearchView.queryTextChanges(searchView) // no debounce required here
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(query -> mPresenter.updateUI(query));

RxSearchView.queryTextChanges 覆盖监听器,所以,当然,只有第二个被调用。

我可以将这两个调用 searchRequestupdateUI 与不同的去抖动组合成一个 rx 序列吗? 我应该以某种方式使用过滤器运算符吗?

您可以通过多种方式解决此问题,但我认为成本最低的方法是使用 .share() 运算符。此运算符是 .publish().refCount() 的 shorthand。所以你可以做这样的事情。

Observable<String> sharedTextChanges = RxSearchView.queryTextChages(searchViw).share()

sharedTextChanges
            .debounce(500, TimeUnit.MILLISECONDS) // use debounce 
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(query -> mPresenter.searchRequest(query));

sharedTextChanges
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(query -> mPresenter.updateUI(query));

希望对您有所帮助。