RxSearchView
「入力しながら検索」の形式でテキストの変更を照会するために使用しています
RxSearchView.queryTextChanges(searchView)
しかし、ユーザーが検索を送信したときにもキャッチしたいので、使用する必要があります
RxSearchView.queryTextChangeEvents(searchView)
またsearchView.setOnQueryTextListener
これらの最後の2つのいずれかを使用すると、最初のをキャンセルしているようにRxSearchView.queryTextChanges
見えます.SearchViewに接続できるオブザーバブルは1つだけのようです.
両方のイベントを同時に観察するにはどうすればよいですか?
ここに完全なコードがあります
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) {
}
});
}