【问题标题】:Filter a Recyclerview using data from another activity使用来自另一个活动的数据过滤 Recyclerview
【发布时间】:2018-08-05 01:37:58
【问题描述】:

在我正在做的一个应用程序中,我有这个 Recyclerview,它可以让用户看到我的项目类中的所有数据。此外,可以根据用户在另一个名为 find_item.activity 的活动中选择的特征类型相应地过滤 Recyclerview。所以从 find_item 活动到结果活动的数据传输很好,但现在的问题在于过滤 recyclerview 部分。 对于使用此方法过滤的 Im。

public void viewResult(String hair, String color)
{
    hair=hair.toLowerCase();
    color=size.toLowerCase();
    new_list=new ArrayList<>();

    for(finditem_getItems items:arrayList)
    {
        if(items.getHair().toLowerCase().matches(hair) && items.getColor().toLowerCase().matches(color))
        {

            if(!(items.getHair().toLowerCase().contains(hair) && !(items.getColor().toLowerCase().contains(color)))){
                results.setText("Search not found");
            }
            else
            {
                new_list.add(items);
            }
        }
        else if(items.getHair().toLowerCase().matches(hair))
        {                     
             new_list.add(items);                  
        }

    }
    arrayList.clear();
    adapter.filterSearch(new_list);
}

这就是我在适配器类中用来过滤数组列表的方法

public void filterSearch(ArrayList<findpet_getItems> searchLlist){
    arrayList=new ArrayList<>();
    arrayList.clear();
    arrayList.addAll(searchLlist);
    notifyDataSetChanged();
}

在第一种方法中,我使用来自其他活动的数据作为参数并使用它来过滤 recyclerview,但在我的过滤器方法的实现中似乎有问题。

现在的问题是,如果搜索项不存在,它不会触发错误语句,如果搜索项确实存在但两个参数不匹配,它只会显示所有匹配的数据给定搜索选择的数据。

谁能告诉我我在过滤方面做错了什么。

【问题讨论】:

    标签: java android android-recyclerview filtering


    【解决方案1】:

    我从这个问题中得到的必须解决它。

     public void viewResult(String hair, String color) {
        hair = hair.toLowerCase();
        color = size.toLowerCase();
        new_list = new ArrayList<>();
        if(TextUtils.isEmpty(hair)  || TextUtils.isEmpty(color)){
            // To handle the case if search filers are blank
            // show the original complete list 
            new_list.addAll(arrayList);
        }else {
            for (finditem_getItems items : arrayList) {
                if (items.getHair().toLowerCase().matches(hair) || items.getColor().toLowerCase().matches(color)) 
                    new_list.add(items);
            }
        }
        arrayList.clear();
        adapter.filterSearch(new_list);
        if(new_list.size==0){
            results.setText("Search not found");
        }else{
            results.setText("");
        }
    }
    

    根据您的需要更改循环内的代码,因为我不知道您的搜索策略。

    更新:回答您的第二个问题

     public void viewResult(String hair, String color) {
        hair = hair.toLowerCase();
        color = size.toLowerCase();
        new_list = new ArrayList<>();
        if(TextUtils.isEmpty(hair)  && TextUtils.isEmpty(color)){
            // To handle the case if search filers are blank
            // show the original complete list
            new_list.addAll(arrayList);
        }else {
            for (finditem_getItems items : arrayList) {
                if(!TextUtils.isEmpty(hair)  && !TextUtils.isEmpty(color)){
                    if (items.getHair().toLowerCase().matches(hair) && items.getColor().toLowerCase().matches(color))
                        new_list.add(items);
                }else {
                    if (items.getHair().toLowerCase().matches(hair) || items.getColor().toLowerCase().matches(color))
                        new_list.add(items);
                }
            }
        }
        arrayList.clear();
        adapter.filterSearch(new_list);
        if(new_list.size==0){
            results.setText("Search not found");
        }else{
            results.setText("");
        }
    }
    

    【讨论】:

    • 它可以工作,但如果您不介意,我确实有一个问题。如果选择了两个搜索项,例如头发是“长”并且颜色是“红色”,我想用仅与这两个匹配的项目过滤 recyclerview。我该怎么做?
    • 我尝试在您给出的代码中添加此语句,即 if (items.getHair().toLowerCase().matches(hair) && items.getColor().toLowerCase() .matches(color)) { new_list.add(items); } 但它似乎不起作用,因为它还会触发第一个语句,其中出现所有具有相同头发或相同颜色的项目。
    • 这将是另一种情况,因此您必须首先检查搜索参数是两个还是一个。
    • 我实际上在 java 和 android 中还是新的,所以我不知道如何实现它。啊,如果你不介意,你能解释一下我该怎么做。
    • 我已经更新了答案。看看是否工作。调试代码分析流程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多