我的问题有两个问题。我曾经使用过RxSearchView
一段时间。我使用map
,filter
和最后switchMap
来查询来自api的搜索事件。首先在map
或filter
函数中,我更新了这样的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;
}
})
从这些函数中继续更新ui是一个好习惯吗? 其次,删除字符不能以这种方式处理。请给我建议/链接。我是Rx的新手。非常感谢!
答案 0 :(得分:1)
从这些函数中继续更新ui是一个好习惯吗?
您不需要也不应该在此使用runOnUIThread()
。您可以向响应链中的observeOn
运算符添加多个调用以切换线程。以下是有关线程的一些链接:
observeOn
and subscribeOn
:博客上的subscribeOn和observeOn gif可以更容易地显示差异并使用observeOn
。其次,删除字符无法以这种方式处理。请给我建议/链接。
而不是过滤,而应使用debounce()
运算符。
这是2017年Droidcon波士顿的link to my talk,其中我谈到了debounce()
和switchMap()
的自动搜索问题。滚动到~25:00时间。您可以找到处理字符删除的demo code以及blog post。
我希望这会有所帮助。