Android EditText 试用RxJava搜索框延时搜索
使用RxJava能够更简单的监听EditText文本变化,即使用debounce操作符处理不断产生的文本变化事件。试用Handler 会造成内存泄漏,所以推荐使用RxJava的方法
debounce操作符对源Observable每产生一个结果后,如果在规定的间隔时间内没有别的结果产生,则把这个结果提交给订阅者处理,否则忽略该结果。
RxTextView.textChangeEvents(etClearSearch)
.debounce(300, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<TextViewTextChangeEvent>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(TextViewTextChangeEvent textViewTextChangeEvent) {
//自己要操作的。。。
}
});
或者
RxTextView.textChanges(clearSerach)
.map(CharSequence::toString)
.debounce(300, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(input -> {
String keyword = clearSerach.getText().toString().trim();
EventBus.getDefault().post(new MessageEvent(INSURANCE_SEARCH, keyword));
});
kotlin写法
RxTextView.textChanges(clear_serach) //限流时间500ms
.debounce(500, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread()) //CharSequence转换为String
.map { obj: CharSequence -> obj.toString() }
.subscribe { s: String? ->
refreshLayout.autoRefresh()
}