J'ai utilisé RecyclerView
et personnalisé Adaptateur dans mon application ... adaptateur être mis en œuvre Filtrable pour la recherche. Comment mettre en haute lumière le texte de recherche?Comment haute lumière texte de recherche dans l'adaptateur RecyclerView
Ce mon code pour filtrables adaptateur personnalisé:
private Filter filterResult = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
ArrayList<Moment> tempList = new ArrayList<>();
if (MOMENT_FILTER != null) {
if (TextUtils.isEmpty(constraint)) {
tempList = (ArrayList<Moment>) MOMENT_FILTER;
} else {
int length = MOMENT_LIST.size();
int i = 0;
while (i < length) {
Moment item = MOMENT_FILTER.get(i);
if (item.getMoment().contains(constraint))
tempList.add(item);
i++;
}
}
}
filterResults.values = tempList;
filterResults.count = tempList.size();
return filterResults;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
MOMENT_LIST = (ArrayList<Moment>) results.values;
if (results.count > 0) {
notifyDataSetChanged();
}
}
};
@Override
public Filter getFilter() {
return filterResult;
}
Et ce mon code d'activité pour le changement de texte (EditText):
EDT_SEARCH.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
adapter.getFilter().filter(s);
}
@Override
public void afterTextChanged(Editable s) {
}
});
résultat est OK avec Sahil répondre!
merci, mais je ne change pas Moment (modèle de base de données), car utilisé dans toute méthode! –
Ajouter un autre paramètre ne devrait pas affecter votre autre modèle. comme il n'est pas nécessaire de modifier le code de votre autre méthode –
@ghasemdeh J'ai mis à jour ma réponse. c'est adapté en fonction de vos besoins. s'il vous plaît vérifier –