我在用
RxSearchView.queryTextChangeEvents
检测“键入时搜索”的事件以及当您提交搜索时,SAYT 会获取建议,当您提交时,它会执行完整搜索。
我目前有两个问题。
当您输入并获取建议时,突然您单击提交,然后它会执行完整搜索,但问题是,如果有一个正在进行的建议请求,可能会出现它们不应该作为完整搜索出现在屏幕上的情况搜索优先。
所以我想取消(取消订阅)建议中的请求,以防在完整搜索中有提交。
我怎样才能用这段代码实现这一点?
另一个问题是,当我在搜索视图中删除搜索词并且它变空时,它会清除适配器,但在某些情况下,当我清除搜索文本时,仍然有一个正在进行的建议请求,它会设置结果但是它很清楚,所以我想保证如果用户清除搜索视图,它会取消所有请求。
这是我正在使用的代码。
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) {
}
});
}