я использую RxSearchView
для запроса изменения текста в форме «Поиск при вводе»RxSearchView наблюдения textChanges и события в то же время
RxSearchView.queryTextChanges(searchView)
, но я хотел бы также поймать, когда пользователь отправляет поиск, поэтому я должен использовать
RxSearchView.queryTextChangeEvents(searchView)
или searchView.setOnQueryTextListener
При использовании любого из этих последних 2, похоже, они отменяют первый RxSearchView.queryTextChanges
, похоже, что может быть только 1 OBSE rvable, прикрепленный к SearchView.
Как я могу наблюдать за обоими событиями одновременно?
Вот полный код
private void setupSearch() {
RxSearchView.queryTextChangeEvents(searchView)
.skip(1)
.throttleLast(100, TimeUnit.MILLISECONDS)
.debounce(200, TimeUnit.MILLISECONDS)
.onBackpressureLatest()
.observeOn(AndroidSchedulers.mainThread())
.filter(new Func1<SearchViewQueryTextEvent, Boolean>() {
@Override
public Boolean call(SearchViewQueryTextEvent searchViewQueryTextEvent) {
final boolean empty = TextUtils.isEmpty(searchViewQueryTextEvent.queryText());
if (empty) {
//Dont show anything clear adapter
}
return !empty;
}
}).subscribe(new Subscriber<SearchViewQueryTextEvent>() {
@Override
public void onNext(SearchViewQueryTextEvent searchViewQueryTextEvent) {
String searchTerm = searchViewQueryTextEvent.queryText().toString();
if (searchViewQueryTextEvent.isSubmitted()) {
submitFullSearch(searchTerm);
} else {
submitRecommendationsSearch(searchTerm);
}
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
});
}
Я только что обновил ответ с полным кодом, но дело в том, что дребезг и throttleLast будут также влиять на поиск с submit и я надеялся их разделить –
есть также этот пример https://github.com/kmdupr33/iosched/blob/feature/rxjava_rewrite/android/src/main/java/com/google/samples/apps /iosched/ui/SearchActivity.java, но я не могу найти класс DelegatingOnQueryTextListener.java для его проверки. –
@JavierVargas. Если вам нужно несколько подписчиков, посмотрите на 'ConnectableObservable' (https: // gi thub.com/ReactiveX/RxJava/wiki/Connectable-Observable-Operators). Затем вы можете фильтровать каждый поток отдельно. – iagreen