J'utiliseRx SearchView doit annuler la demande en cours avec moins de priorité
RxSearchView.queryTextChangeEvents
pour détecter les événements de « Recherche As You Type » et également lorsque vous soumettez une recherche , SAYT est d'obtenir des suggestions et quand vous faites un soumettre, il exécute une recherche complète.
J'ai deux problèmes en ce moment. Lorsque vous tapez et obtenez des suggestions, mais que vous cliquez soudainement sur soumettre, la recherche complète est exécutée, mais le problème est que s'il y a une demande de suggestion en cours, il se peut qu'ils apparaissent à l'écran quand ils le devraient. pas comme la recherche complète a la priorité.
Donc je voudrais annuler (désinscription) la demande des suggestions dans le cas où il y a un soumettre sur la recherche complète.
Comment puis-je réaliser cela avec ce code? Un autre problème est que lorsque je supprime le terme de recherche dans la vue de recherche et qu'il est vide, il efface l'adaptateur mais il y a des cas où j'efface le texte de recherche, il y a toujours une demande de suggestions en cours et il Définit les résultats mais il est clair, je voudrais donc garantir que si l'utilisateur efface le searchview, il annule toutes les demandes.
Voici le code que j'utilise.
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
clearAdapter();
}
return !empty;
}
})
.concatMap(new Func1<SearchViewQueryTextEvent, Observable<Object>>() {
@Override
public Observable<Object> call(SearchViewQueryTextEvent searchViewQueryTextEvent) {
String searchTerm = searchViewQueryTextEvent.queryText().toString();
boolean submitted = searchViewQueryTextEvent.isSubmitted();
//Hide RecyclerView
//Show loading indicator
showLoading();
Observable<Object> observable;
if (submitted) {
observable = getFullSearch(searchTerm);
} else {
observable = getSuggestionsSearch(searchTerm);
}
return observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnCompleted(new Action0() {
@Override
public void call() {
//Show RecyclerView
//Hide loading indicator
showContent();
}
});
}
})
.subscribe(new Subscriber<Object>() {
@Override
public void onNext(Object object) {
//Set data on recyclerview and notify change.
setData(object);
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
});
}
ont parfaitement fonctionné –
heureux de vous aider! :) – Aballano