【发布时间】:2018-02-06 18:13:03
【问题描述】:
我正在尝试将LiveData 与RxBinding 库结合起来,我想使用RxSearchView 并使用switchMap 来订阅最新的observable。我不确定我的实施是否良好。我将向您展示我的代码,请您告诉我是否有其他方法可以实现这一目标?
disposable = RxSearchView.queryTextChanges(searchView)
.debounce(300, TimeUnit.MILLISECONDS)
.switchMap(charSequence -> {
detailViewModel.loadSearchTask(charSequence);
return Observable.just(charSequence);
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
compositeDisposable.add(disposable);
public void loadSearchTask(CharSequence s) {
taskInteractor
.search(s.toString())
.doOnSubscribe(disposable -> rxSearchLiveData.addDisposable(disposable))
.subscribe(
charSequence -> rxSearchLiveData.setValue(Resource.success(charSequence)),
throwable -> error.setValue(Resource.error(throwable.getMessage(), throwable)));
}
编辑:我应该改用Flowable 吗?
【问题讨论】:
-
1.) 为什么要在 switchMap 中启动一个新的 observable,它应该是一个纯函数 2.) 在这种情况下使用 BehaviorSubject 而不是 LiveData
标签: android rx-java2 android-livedata rx-binding