Android RxSearchView搜索

Android RxSearchView搜索,android,rx-java2,Android,Rx Java2,我的问题有两个方面。我已经使用RxSearchView一段时间了。我使用了map,filter和最后的switchMap从api查询搜索事件。首先,在映射或过滤器功能中,我更新了如下ui: .filter(new Predicate<String>() { @Override public boolean test(String s) throws Exception {

我的问题有两个方面。我已经使用
RxSearchView
一段时间了。我使用了
map
filter
和最后的
switchMap
从api查询搜索事件。首先,在
映射
过滤器
功能中,我更新了如下ui:

.filter(new Predicate<String>() {
                        @Override
                        public boolean test(String s) throws Exception {
                            if (searchViewQueryTextEvent.queryText().toString().length() < 3 && mUserList != null) {
                                mUserList.clear();
                            getActivity().runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    mUserSearchAdapter.notifyDataSetChanged();
                                }
                            });
                        }
                            return s.length() > 2;
                        }
                    })
.filter(新谓词(){
@凌驾
公共布尔测试(字符串s)引发异常{
if(searchViewQueryText.queryText().toString().length()<3&&mUserList!=null){
mUserList.clear();
getActivity().runOnUiThread(新的Runnable()){
@凌驾
公开募捐{
mUserSearchAdapter.notifyDataSetChanged();
}
});
}
返回s.length()>2;
}
})
那么,从这些函数内部不断更新ui是一种好的做法吗? 其次,删除字符不能用这种方式处理。请给我建议/链接。我是新来的。非常感谢

那么,从这些函数内部不断更新ui是一种好的做法吗

您不需要也不应该在此处使用
runOnUIThread()
。您可以向反应链中的
observeOn
操作符添加多个调用以切换线程。以下是有关线程的一些链接:

  • :阅读有关线程的内容
  • :博客上的subscribeOn和observeOn GIF使差异更容易可视化和使用
  • :我们可以多次使用
    observeOn
  • :与您需要实现的目标类似
其次,删除字符不能用这种方式处理。请给我建议/链接

您应该使用
debounce()
运算符来代替过滤。 下面是2017年在Droidcon Boston举行的一次会议,我在会上讨论了
debounce()
switchMap()
滚动到~25:00时间的自动搜索问题。您可以找到处理字符删除的,以及


我希望这会有帮助。

这是非常有帮助的。感谢您的指导。我一定会看看你的Droidcon演讲:)