【问题标题】:Adding a second filter to a listview向列表视图添加第二个过滤器
【发布时间】:2018-11-26 18:53:36
【问题描述】:

我的应用中有一个片段,其中包含艺术家的自定义列表视图。 此自定义列表视图连接到自定义过滤器,该过滤器通过搜索视图过滤艺术家姓名。

现在我想添加第二个搜索视图,它将通过另一个参数过滤自定义列表视图。

如何在我的适配器中创建第二个过滤器,以便每个搜索视图都会以不同的方式过滤它,但有自己的参数?

这是当前的过滤器:

@NonNull
@Override
public Filter getFilter() {
    return nameFilter;
}

private Filter nameFilter = new Filter() {

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        copyList();
        FilterResults results = new FilterResults();
        ArrayList<String> suggestions = new ArrayList<>();
        if (constraint == null || constraint.length()==0){
            suggestions.addAll(namesFull);
        }
        else {
            suggestions.clear();
            String filterPattern = constraint.toString().toLowerCase().trim();
            for (String s : namesFull){
                if (s.toLowerCase().contains(filterPattern)){
                    suggestions.add(s);
                }
            }
        }
        results.values = suggestions;
        results.count = suggestions.size();

        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        clear();
        addAll((List)results.values);
        notifyDataSetChanged();

    }
};

private void copyList() {
    if (namesFull.size()==0) {
        namesFull.addAll(BandsList);
    }
}

这是来自搜索视图的过滤器参考:

nameFilter.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String text) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String text) {
            artistsAdapter.getFilter().filter(text);
            artistsAdapter.notifyDataSetChanged();
            return false;
        }
    });

【问题讨论】:

    标签: android listview filter android-arrayadapter searchview


    【解决方案1】:

    所以我能够想办法解决这个问题。 我所做的是让不同的 SearchViews 通过一个表示数字(“1”、“2”、“3”...)的字符串定义相同的变量,这样我就可以区分它们。

    然后,在 getFilter 下,我添加一个 if 语句来检查这个变量并返回所需的自定义过滤器类。

    这样,每个 SearchView 都会以不同的方式过滤列表。

    希望对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-11-17
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多