【问题标题】:android: How to filter items based on child items?android:如何根据子项目过滤项目?
【发布时间】:2014-12-15 07:58:13
【问题描述】:

这是我的模型:

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) 过滤结果,但它不起作用。
有什么想法吗?

【问题讨论】:

  • 什么是 getSubStrings() ?
  • 它包含字符串数组
  • 一旦人们开始回答问题,请不要更改问题,除非添加说明。将实际代码从可以编译但不起作用的代码更改为无法编译的代码,只会使人们的答案无效。
  • @SirwanAfifi,你是否对我的问题投了反对票,你能给出理由吗?
  • @HareshChhelana 我没有否决你的回答。

标签: java android filtering


【解决方案1】:

试试这个方法,希望能帮助你解决问题。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如果这不起作用,那么您需要更清楚地表达您的要求。这个解决方案在哪些方面是不充分的?因为我觉得这很好。
    • 您更新后的 if 语句与我的不同。你需要用Arrays.asList(...)包裹起来
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    相关资源
    最近更新 更多