1

我正在使用 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 序列吗?我应该以某种方式使用过滤器运算符吗?

4

1 回答 1

1

您可以通过多种方式解决此问题,但我认为最便宜的方法是使用.share()运营商。该运算符是 的简写.publish().refCount()。所以你可以做这样的事情。

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));

希望这可以帮助。

于 2018-01-26T10:45:32.310 回答