【问题标题】:Three input field searching三输入字段搜索
【发布时间】:2019-08-01 08:44:11
【问题描述】:

三个输入框同时过滤列表有简单的解决方案吗?

要求是3个搜索字段同时显示和激活,然后用户可以立即搜索三个字段中的任何一个。每次搜索都会自动缩小结果范围。

这个问题有什么算法或解决方案吗?

提前致谢。

【问题讨论】:

    标签: android search filter recyclerview-layout


    【解决方案1】:

    试试这个,它对我有用 在你的 getFilter 方法中

    if (androidVersion.name()(your 1st field).toLowerCase().contains(charString) 
    ||   androidVersion.id()(your 2nd field).toLowerCase().contains(charString) 
    || androidVersion.number()(your 3rd field).toLowerCase().contains(charString)
    {
    filteredList.add(androidVersion);
    }
    

    【讨论】:

    • 如果用户搜索第一个字段和第二个字段或第一个字段和第二个字段和第三个字段,那么它如何过滤所有用户输入的列表..?
    • 对于列表,如何处理 3 字段的循环?
    • 请查看下面的答案以了解可能对您有所帮助的过滤方法。
    【解决方案2】:

    在你的适配器类中

    private ArrayList<MyBean> videoList;//your arrayList
    private ArrayList<MyBean> vList;//new list for search view
    
    public Filter getFilter() {
    
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {
                String charString = charSequence.toString();
                if (charString.isEmpty()) {
                    videoList = vList;
                } else {
                    ArrayList<MyBean> filteredList = new ArrayList<>();
                    for (MyBean androidVersion : vList) {
                        //you can add your field here
                        if (androidVersion.name()/*(your 1st field)*/.toLowerCase().contains(charString)
                                ||   androidVersion.id()/*(your 2nd field)*/.toLowerCase().contains(charString)
                                || androidVersion.number()/*(your 3rd field)*/.toLowerCase().contains(charString))
                        {
                            filteredList.add(androidVersion);
                        }
                    }
                    videoList = filteredList;
                }
                FilterResults filterResults = new FilterResults();
                filterResults.values = videoList;
                return filterResults;
            }
    
            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                videoList = (ArrayList<MyBean>) filterResults.values;
                notifyDataSetChanged();
            }
        };
    }
    

    【讨论】:

    • 它没有完美运行,但它帮助了我。谢谢:)
    猜你喜欢
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2017-03-01
    相关资源
    最近更新 更多