Handler::removeMessages 的 RxJava 模拟
RxJava analog for Handler::removeMessages
在我开始学习 RxJava 之前,我制作了一个带有 Handler
的 DelayAutoCompleteTextView,用于处理 TextChanged 事件。现在我重写代码,使用 Rx。但是我不能像以前那样做出同样的行为。
代码 Handler
@Override
protected void performFiltering(CharSequence text, int keyCode) {
// remove pending query, because we have new one
mHandler.removeMessages(MESSAGE_TEXT_CHANGED);
// send with delay, to prevent big amount of network requests
// by removing unnecessary ones
mHandler.sendMessageDelayed(mHandler
.obtainMessage(MESSAGE_TEXT_CHANGED, text), mAutoCompleteDelay);
}
我的 RxJava 代码:
getTextChangedObservable(searchView) // onNext(str) in onQueryTextChanged
// poor copy of old implementation
.throttleLast(750, TimeUnit.MILLISECONDS)
.distinctUntilChanged() // prevent duplicates
... // process
谢谢,
安东
根据您的代码,您似乎在寻找去抖运算符:
getTextChangedObservable(searchView)
.debounce(750, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
.distinctUntilChanged()
.subscribe(query -> {
Log.d("Search", "Query " + query);
});
在我开始学习 RxJava 之前,我制作了一个带有 Handler
的 DelayAutoCompleteTextView,用于处理 TextChanged 事件。现在我重写代码,使用 Rx。但是我不能像以前那样做出同样的行为。
代码 Handler
@Override
protected void performFiltering(CharSequence text, int keyCode) {
// remove pending query, because we have new one
mHandler.removeMessages(MESSAGE_TEXT_CHANGED);
// send with delay, to prevent big amount of network requests
// by removing unnecessary ones
mHandler.sendMessageDelayed(mHandler
.obtainMessage(MESSAGE_TEXT_CHANGED, text), mAutoCompleteDelay);
}
我的 RxJava 代码:
getTextChangedObservable(searchView) // onNext(str) in onQueryTextChanged
// poor copy of old implementation
.throttleLast(750, TimeUnit.MILLISECONDS)
.distinctUntilChanged() // prevent duplicates
... // process
谢谢,
安东
根据您的代码,您似乎在寻找去抖运算符:
getTextChangedObservable(searchView)
.debounce(750, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
.distinctUntilChanged()
.subscribe(query -> {
Log.d("Search", "Query " + query);
});