【问题标题】:RxBinding: different debounced observables within one rx-sequence for RxSearchView?RxBinding:RxSearchView 的一个 rx 序列中的不同去抖动 observables?
【发布时间】:2018-01-22 14:19:42
【问题描述】:

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

【问题讨论】:

    标签: android rx-java2 rx-android rx-binding


    【解决方案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));
    

    希望这会有所帮助。

    【讨论】:

    • 完全按照我的意愿工作!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多