This is my model:
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;
}
}
I populated my list view, and use my custom adapter. Now I want to filter the list view based on subStrings
array:
@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();
}
}
As you can see, I just filter result based on _data.getSubStrings().equals(constraint)
But it doesn't work.
Any idea?
equals
is not right way to check because data types are different. You should use Arrays.asList(_data.getSubStrings()).contains(constraint)
Try this way,hope this will help you to solve your problem.
for (AudioFile _data : itemsAll) {
String[] subStringsArray = _data.getSubStrings();
for(String subString : subStringsArray){
if(subString.equals(constraint)){
suggestions.add(_data);
break;
}
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.