Barre d'outils avec SearchView temporaire de filtrage RecyclerView
J'ai besoin pour mettre en œuvre la fonctionnalité de recherche à l'intérieur de mon application android qui utilise la barre d'outils, SlidingTabLayout et ViewPager qui contient des fragments. À l'intérieur de chaque fragment il y a un RecyclerView avec la liste des éléments.
RecyclerView données sont statiques définies dans une catégorie distincte (DataAccess.java) et ces listes sont mises à jour et RecyclerView obtient actualisée juste en appelant (sans les transmettre de nouvelles données)
mRecyclerView.getAdapter().notifyDataSetChanged();
Est-il un moyen simple de filtre provisoire RecyclerView sans changer les données et après que l'utilisateur appuie sur le bouton de retour à l'intérieur de la Barre d'outils pour supprimer le filtre, et de montrer un premier de la liste.
Avant d'appuyer sur l'icône de Recherche à l'intérieur de la barre d'outils menu:
Ainsi, lorsque l'utilisateur tape "Josip..." le filtre est actif
et après, il appuie sur le bouton X dans SearchView l'utilisateur obtient les mêmes données, comme avant, sans filtre.
@Override
public boolean onQueryTextChange(String newText) {
//filter data (temporary remove all items from DataAccess.list that don't .startsWith(newText)
}
@Override
public boolean onQueryTextSubmit(String query)
//Doesn't help if I revert deleted items here
}
OriginalL'auteur fpopic | 2015-01-05
Vous devez vous connecter pour publier un commentaire.
DANS @Override public boolean onQueryTextChange(String newText) { if (texte.isEmpty()) ((ItemAdapter) myRecList.getAdapter).flushFilter(); } OU DANS OnActionExpandListener.onMenuItemActionCollapse(MenuItem item)
searchView.setOnCloseListener() est la chose, merci quand même de votre commentaire qui m'a mis sur le droit chemin !
Pourriez-vous poster votre solution?
Je n'ai pas le temps de finir de provoquer des réponses est venu à la fin, mais avez-vous essayé cette @merovingen réponse, il semble bien?
OriginalL'auteur merovingen
Je voulais ajouter comme commentaire, mais en raison de moins de réputation...je réponds à la poste.
Cette méthode fonctionne bien si (item.toLowerCase().contient(queryText)) mais que faire si la correspondance n'est trouvée dans la première itération.puis il va aller dans d'autre partie sans boucle, tout au long de allObjects liste...
J'ai eu la réponse de mon supérieur ,j'espère que ça aide.
OriginalL'auteur Ravi Yadav
Je n'oppose pas le donné et accepté de répondre. Il y a une salle pour les performances possibles écueils. On devrait faire usage de
Filterabe
interface. Avoir cette mise en œuvre va se comporter comme ol bonneListView
qui ne le filtrage de manière asynchrone. Ensuite, il vous suffit d'écrire votre propreFilter
et de l'instancier dans le substituéegetFilter()
méthode;Dans mon cas, j'ai utilisé
Filter
le tri d'un adaptateur de nombreux (oui, beaucoup beaucoup). Il a été junky de tri sur l'UI thread.J'ai donc eu cette classe abstraite
Et la classe qui hérite de:
OriginalL'auteur Nikola Despotoski