我有一個EditText
並在它的正下方ViewPager
有四個選項卡,我目前正在做的是當文本更改時使用Retrofit
執行對Rest服務的請求。執行取決於單個RxTextView的多個不同的翻新呼叫
RxTextView.textChangeEvents(searchbar.getEditText())
.debounce(400, TimeUnit.MILLISECONDS)
.filter(new Func1<TextViewTextChangeEvent, Boolean>() {
@Override
public Boolean call(TextViewTextChangeEvent text) {
return (text.text().length() > 2);
}
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(Schedulers.io())
.switchMap(new Func1<TextViewTextChangeEvent, Observable<?>>() {
@Override
public Observable<?> call(TextViewTextChangeEvent textViewTextChangeEvent) {
String searchBarText = textViewTextChangeEvent.text().toString();
switch (visibleTab) {
case TAGS:
return presenter.executeSearchPostsByTag(searchBarText, String.valueOf(0));
case PEOPLE:
return presenter.executeSearchPostsByPeople(searchBarText, String.valueOf(0));
case COMPANIES:
return presenter.executeSearchPostsByCompanies(searchBarText, String.valueOf(0));
case JOBS:
return presenter.executeSearchPostsByJobs(searchBarText, String.valueOf(0));
default:
return presenter.executeSearchPostsByTag(searchBarText, String.valueOf(0))
.toCompletable().toObservable();
}
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Object>() {
// here I use EventBus to pass the results to the Fragments (Tabs)
// ... code omitted ...
正如你可以從每個選項卡的代碼注意到我有不同的請求。
但現在需求已經改變,並且對於每個文本改變都有EditText
我必須同時執行全部四個請求。
我搜索了很多,我發現我可以使用combineLatest' so I added all four calls to
combineLatest`但因爲他們都取決於文本的變化沒有發生。
Observable.combineLatest(presenter.executeSearchPostsByTag(/** what to add as queryText **/),
presenter.executeSearchPostsByJobs(/** what to add here as queryText**/), //omits the other two calls)
正如你在右上方看到的,我不知道如何通過queryText
。必須有一種方法將combineLatest
代碼與RxTextView.textChangeEvents(searchbar.getEditText())...
代碼相結合,直到我開始發佈的switchMap
,但我找不到它。
編輯:那也許是combineLatest
錯了,我可以這樣做:
.map(new Func1<String, Boolean>() {
@Override
public Boolean call(String s) {
presenter.executeSearchPostsByTag(s, String.valueOf(0));
presenter.executeSearchPostsByPeople(s, String.valueOf(0));
presenter.executeSearchPostsByJobs(s, String.valueOf(0));
presenter.executeSearchPostsByCompanies(s, String.valueOf(0));
return true;
}
})
但我不知道如何得到的結果給用戶
所以我可以訂閱四次'requestObservable'那是新的我!我會從現在的晚些時候開始檢查它,並且會告訴你它是如何發生的(並接受答案!)。謝謝! – Mes