我已经实现了SearchView小部件和ContentProvider集成。
我担心的是不要让用户在SearchView的EditText中为每个输入或删除的字母垃圾邮件Web服务。因此,应在用户停止输入后触发ContentProvider的查询,比如阈值为2秒。
我没有运气这样做,我认为RXSearchView是使用去抖动的解决方案。但是,即使设置10秒延迟也不起作用。我是在正确的轨道上吗?或者我需要使用不同的方法/属性。
int time = 10000;
RxSearchView.queryTextChanges(searchView)
.delay(time, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
.debounce(time, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
.throttleWithTimeout(time, TimeUnit.MILLISECONDS)
.distinctUntilChanged()
.observeOn(AndroidSchedulers.mainThread());
答案 0 :(得分:0)
这是我使用的方法并且工作正常:
1-首先为Listener
创建setOnQueryTextChangedListener
:
searchView.setOnQueryTextListener(new OnQueryTextListener()...);
2-在您的onQueryTextChange
方法调用onNext订阅者:
@Override
public void onQueryTextChange(String s) {
subscriber.onNext(s);
}
3-使用debounce方法发出:
.filter(new Func1<String, Boolean>() {
@Override
public Boolean call(String s) { //make sure query is not empty
return !TextUtils.isEmpty(s);
}
})
.debounce(500, TimeUnit.MILLISECONDS) //wait 500ms to
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<TESTTTT>())
有关完整代码,请参阅iosched中的this commit;代码的主要部分位于onCreateOptionsMenu
。