您的位置:首页 > 编程语言 > Java开发

RxJava实例-用debounce实现的简单即时搜索

2017-05-16 09:43 239 查看

效果图

debounce.gif

说明

运用debounce操作符进行文本搜索,输入单个字符并不会触发搜索,而是在等待一定时间后才触发搜索。

debounce

image.png

上面这个图并不是很直观,换一个图

image.png

debounce的意思是“去除抖动”,debounce操作符对源Observable每产生一个结果后,如果在规定的间隔时间内没有别的结果产生,则把这个结果提交给订阅者处理,否则忽略该结果。

主要代码

subscription = Observable
.create(new Observable.OnSubscribe<String>() {
@Override
public void call(final Subscriber<? super String> subscriber) {
mEtSearch.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
subscriber.onNext(s.toString());
}

@Override
public void afterTextChanged(Editable s) {

}
});
}
})
.debounce(500, TimeUnit.MILLISECONDS)
.filter(new Func1<String, Boolean>() {
@Override
public Boolean call(String s) {
if (!TextUtils.isEmpty(s)) return true;
return false;
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
log("subscriber -> onCompleted");
}

@Override
public void onError(Throwable e) {
log("subscriber -> onError ->" + e.getMessage());
}

@Override
public void onNext(String s) {
log(s);
}
});

监听EditView里的文字改变,然后用debounce规定时间间隔为500ms,相隔500ms以上的改变才允许通过输出log。

源代码

Demo地址:https://github.com/jiangkang/KTools.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: