android:如何基于子项过滤项?

时间:2014-10-20 10:54:08

标签: java android filtering

这是我的模特:

public class AudioFile {
    private int id;
    private String fileName;
    private String[] subStrings;
    public AudioFile(int id, String fileName, String[] subStrings){
        this.id = id;
        this.fileName = fileName;
        this.subStrings = subStrings;
    }
        public int getId() {
        return id;
    }
        public void setId(int id) {
        this.id = id;
    }
        public String getFileName() {
        return fileName;
    }
        public void setFileName(String fileName) {
        this.fileName = fileName;
    }
        public String[] getSubStrings() {
        return subStrings;
    }
        public void setSubStrings(String[] subStrings) {
        this.subStrings = subStrings;
    }
        @Override
    public String toString() {
        return fileName;
    }
}

我填充了我的列表视图,并使用我的自定义适配器。现在我想根据subStrings数组过滤列表视图:

@SuppressLint("DefaultLocale")
@Override
protected FilterResults performFiltering(CharSequence constraint) {
    constraint = constraint.toString().toLowerCase();
    if (constraint != null) {
        suggestions.clear();
        for (AudioFile _data : itemsAll) {
            if (_data.getSubStrings().contains(constraint)) {
                suggestions.add(_data);
            }
        }
        FilterResults filterResults = new FilterResults();
            filterResults.values = suggestions;
            filterResults.count = suggestions.size();
            return filterResults;
    } else {
            return new FilterResults();
    }
}

正如您所看到的,我只是根据_data.getSubStrings().equals(constraint)过滤结果但是它不起作用。
有什么想法吗?

2 个答案:

答案 0 :(得分:0)

equals不是正确的检查方式,因为数据类型不同。您应该使用Arrays.asList(_data.getSubStrings()).contains(constraint)

答案 1 :(得分:0)

请尝试这种方式,希望这有助于您解决问题。

for (AudioFile _data : itemsAll) {
    String[] subStringsArray = _data.getSubStrings();
    for(String subString : subStringsArray){
        if(subString.equals(constraint)){
           suggestions.add(_data);
           break;
        }
     }
 }