这个就是Rxsearch,在searchview的基础上进行延伸。。。
public class RxSearch {
public static Observable<String> fromSearchView(@NonNull final SearchView searchView) {
final BehaviorSubject<String> subject = BehaviorSubject.create("");
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
subject.onCompleted();
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
if (!newText.isEmpty()) {
subject.onNext(newText);
}
return true;
}
});
return subject;
}
}
用法如下
mSubscription = RxSearch.fromSearchView(searchView) .debounce(500, TimeUnit.MILLISECONDS) .filter(item -> item.length() >= 1) .observeOn(AndroidSchedulers.mainThread()) .subscribe(query -> { //此处进行搜索操作 } }); //此处进行搜索操作 } });
debounce 是延迟 500毫秒后进行请求。。Filter是过滤无效的请求,就是当输入为空的时候就不进行网络请求。。。