简体   繁体   中英

android: How to filter items based on child items?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM