J'utilise RxSearchView
pour interroger les changements de texte dans une forme de « recherche que vous tapez »RxSearchView observer textChanges et événements en même temps
RxSearchView.queryTextChanges(searchView)
mais je voudrais attraper aussi lorsque l'utilisateur soumet la recherche, donc je dois utiliser
RxSearchView.queryTextChangeEvents(searchView)
ou searchView.setOnQueryTextListener
Lorsque j'utilise l'un de ces deux derniers, on dirait qu'ils annulent la première RxSearchView.queryTextChanges
, ressemble qu'il ne peut y avoir 1 obse rvable attaché à SearchView.
Comment puis-je observer les deux événements en même temps?
Voici le code complet
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) {
}
});
}
Je viens mis à jour la réponse avec le code complet, mais la chose est que l'anti-rebond et throttleLast également une incidence sur la recherche avec le soumettre et j'espérais les séparer –
il y a aussi cet exemple https://github.com/kmdupr33/iosched/blob/feature/rxjava_rewrite/android/src/main/java/com/google/samples/apps /iosched/ui/SearchActivity.java mais je ne trouve pas la classe DelegatingOnQueryTextListener.java pour la tester –
@JavierVargas Si vous avez besoin de plusieurs abonnements, jetez un oeil à 'ConnectableObservable's (https: // gi thub.com/ReactiveX/RxJava/wiki/Connectable-Observable-Operators). Vous pouvez ensuite filtrer chaque flux séparément. – iagreen