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 覆盖监听器,所以,当然,只有第二个被调用。
我可以将这两个调用 searchRequest 和 updateUI 与不同的去抖动组合成一个 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));
希望对您有所帮助。
我正在使用 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 覆盖监听器,所以,当然,只有第二个被调用。
我可以将这两个调用 searchRequest 和 updateUI 与不同的去抖动组合成一个 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));
希望对您有所帮助。