根据searchview android中的文本过滤recylerview中的图标

时间:2016-01-16 15:25:05

标签: android icons filtering android-recyclerview android-search

我已按照本教程操作,并已在我的应用https://github.com/Wrdlbrnft/Searchable-RecyclerView-Demo中成功实施了带有searchview的recylerview。但是,现在我没有在recylerview中显示文本,而是有代表用户在线和离线两种状态的图标,我想要做的是当用户在searchView中键入Online时我只希望在线图标显示并且同时显示他们键入离线我只想显示离线图标。

要过滤文字,如示例所示,我已完成此操作;

if (personStatus.contains(query)) {
             filteredModelList.add(model);

            }

这适用于我的recylerview中基于文本的结果,但是,我想根据recylerView中的图标进行过滤。

图标可以是R.drawable.Online或R.drawable.Offline。我有一个名为icon的imageView。

到目前为止我尝试了什么;

if(query.toLowerCase().equals("online") {

                filteredModelList.add(model.getIcon().getDrawable(R.drawable.online));

            }

这似乎不起作用,我在getIcon上遇到错误,它说无法解析方法getIcon。我有一个方法getIcon,如上面exampleModel类中的示例所示;

我想做的是;

IF searchView text = "Online" THEN
   Only show recylerview items that contains icon Online

我希望我已经完全解释了自己,如果不是,请告诉我。

1 个答案:

答案 0 :(得分:0)

在处理大型数据集时,您使用的方法可能会很慢,因为您正在主线程上进行搜索。如果搜索没有在8ms完成,你将要遇到垃圾。

您使用query.toLowerCase().equals("online")的比较很好。您需要在适配器中移动应该实现Filterable的逻辑。您需要在模型中切换该在线/离线状态,例如:setStatus(Status.ONLINE)setStatus(Status.OFFLINE)所以迭代以查找特定状态的所有项目很简单,只需使用您的条件&来自SearchView的约束,即query.toLowerCase().equals("online")

看看我的回答here。我或多或少都提到过。