2014-10-20 110 views
0

这是我的模型:android:如何过滤基于子项目的项目?

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)但它不工作只是进行筛选。
有什么想法?

+0

什么是getSubStrings()? – 2014-10-20 10:59:03

+0

它包含字符串数组 – 2014-10-20 10:59:46

+1

一旦有人开始回答问题,请不要改变问题,除了添加说明。将实际代码从编译但不工作的东西改变为不编译的东西,只会使人们的答案无效。 – 2014-10-20 11:09:53

回答

0

试试这种方式,希望这会帮助你解决你的问题。

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

进行换行是否有任何投票原因? – 2014-10-20 11:08:40

0

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

+0

其实我测试过了,它不起作用。 – 2014-10-20 11:02:51

+0

如果这不起作用,那么您需要更清楚地表达您的要求。这种解决方案的方式不合适?因为对我来说似乎很好。 – 2014-10-20 11:10:25

+0

您更新的if语句与我的不同。您需要使用'Arrays.asList(...)' – 2014-10-20 11:13:41