J'ai besoin de filtrer mes éléments de liste via la méthode getFilter, Dans ma classe Model, j'ai une variable de tableau nommé genre
.Filtre de recherche dans listview pour un tableau de chaînes avec android SearchView
Ce genre est parfois un seul mot, et parfois plus d'un est séparé par ,
. Par exemple:
android, iPhone, blackberry.
Maintenant dans mon code lorsque je tente de chercher dans ma liste pour un produit, il ne recherche que le premier mot (android). En d'autres termes, si j'essaie de rechercher un iPhone, cet élément n'apparaîtra pas dans ma nouvelle liste filtrée.
Dans le code ci-dessous, je sais que je me trompe, mais pouvez-vous m'aider à corriger, s'il vous plaît?
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
dataList = (List<ProductLocal>) results.values;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<ProductLocal> filteredList = new ArrayList<>();
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < dataListFilter.size(); i++) {
ProductLocal dataNames = dataListFilter.get(i);
String genreStr = "";
for (String str : dataNames.getGenre()) {
genreStr += str;
}
genreStr = genreStr.length() > 0 ? genreStr.substring(0,genreStr.length() - 2) : genreStr;
if (genreStr.toLowerCase().startsWith(constraint.toString())) {
filteredList.add(dataNames);
}
}
results.count = filteredList.size();
results.values = filteredList;
return results;
}
};
return filter;
}
Et mon autre question est la suivante:
Comment puis-je rechercher des articles avec plus d'un genre seperatted avec ,
?
Par exemple query = android,blackberry
et le résultat vient avec tous les éléments qui ont ces deux genres
Cela fonctionne pour la recherche par mot-clé unique, mais lorsque j'essaie de faire une recherche multi-mots-clés, elle va dupliquer ma liste filtrée et ne pas fonctionner pour le second mot-clé. – DastakWall
S'il y a de l'espace après la virgule, vous devez mettre la garniture sur la chaîne de filtre – SAJ
Toujours la même chose, mais je vais accepter votre réponse parce que vous avez déjà répondu à ma question principale, et merci beaucoup. – DastakWall