2014-10-20 2 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()? –

+0

Он содержит массив строк –

+1

Пожалуйста, не меняйте вопрос, как только люди начинают отвечать на него, кроме как добавить разъяснения. Изменяя фактический код из того, что компилируется, но не работает, на то, что не компилируется, просто аннулирует ответы людей. –

ответ

0

Попробуйте этот путь, надеясь, что это поможет вам решить вашу проблему.

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

Есть ли причина для голосования? –

0

equals не является правильным способом проверки, поскольку типы данных различны. Вы должны использовать Arrays.asList(_data.getSubStrings()).contains(constraint)

+0

На самом деле я тестировал его, он не работает. –

+0

Если это не сработает, вам необходимо более четко выразить свое требование. Каким образом это решение неадекватно? Потому что это кажется мне прекрасным. –

+0

Ваш обновленный оператор if отличается от моего. Вам нужно обернуть с помощью 'Arrays.asList (...)' –

Смежные вопросы