可搜索的微调器无法工作

时间:2018-06-12 07:24:43

标签: android

我有一个具有搜索功能的微调器。纺纱工具有“hello-there”等项目。一个名称后跟一个连字符,然后是另一个名字。如果我们搜索连字符左侧的关键字,则微调器搜索工作正常。但是如果我们搜索连字符的右侧关键字,它将显示为空。有没有符合我要求的图书馆?或者如何实现这个? Iam目前正在使用这个库 com.toptoche.searchablespinner:searchablespinnerlibrary:1.3.1

1 个答案:

答案 0 :(得分:2)

问题是此库中使用的过滤器是ArrayAdapter类的默认过滤器。

您最好的选择是为微调器数据创建自定义可过滤适配器。 看看这个 question

解决您的连字符问题:过滤器看起来像

 private class ItemFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {

        String filterString = constraint.toString().toLowerCase();

        FilterResults results = new FilterResults();

        final List<String> list = originalData;

        int count = list.size();
        final ArrayList<String> nlist = new ArrayList<String>(count);

        String filterableString ;

        for (int i = 0; i < count; i++) {
            filterableString = list.get(i);
            if (filterableString.toLowerCase().contains(filterString)) {
                nlist.add(filterableString);
            }
        }

        results.values = nlist;
        results.count = nlist.size();

        return results;
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        filteredData = (ArrayList<String>) results.values;
        notifyDataSetChanged();
    }

}
}  

filterableString.toLowerCase()。contains(filterString)应该可以解决问题。但是,如果您想要更复杂的方式,前缀应该是左或右连字符文本的大写。你可以这样继续:

for (int i = 0; i < count; i++) {
        filterableString = list.get(i);
         String[] parts = filterableString.split("-")
       if(parts[0].startsWith(filterString)||parts[1].startsWith(filterString){
            nlist.add(filterableString);
        }
    }