Comment mettre à jour dynamiquement un contrôle ListView sur Android
Sur Android, comment puis-je une ListView
que les filtres basés sur la saisie de l'utilisateur, où les éléments affichés sont mis à jour dynamiquement en fonction de la TextView
valeur?
Je suis à la recherche de quelque chose comme ceci:
-------------------------
| Text View |
-------------------------
| List item |
| List item |
| List item |
| List item |
| |
| |
| |
| |
-------------------------
- - Je proposer pour la ré-ouverture. J'ai mis à jour le texte afin de rendre cela plus d'une question, et c'est clairement une précieuse ressource communautaire, puisque les réponses sont encore à venir
- Merci de rouvrir la question. Il est clairement utile.
InformationsquelleAutor Hamy | 2009-11-15
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous devez créer un fichier XML de mise en page qui a à la fois un EditText, et une ListView.
Cela permettra de jeter tout correctement, avec une belle EditText au-dessus de la Liste. Ensuite, créez une ListActivity comme vous le feriez normalement, mais ajouter un
setContentView()
appel dans leonCreate()
méthode nous utilisons donc notre a récemment déclaré la mise en page. N'oubliez pas que nous ID ed l'ListView
spécialement, avecandroid:id="@android:id/list"
. Cela permet à l'ListActivity
de savoir quiListView
nous voulons utiliser dans nos déclaré la mise en page.L'exécution de l'application devrait maintenant montrer votre précédente
ListView
, avec une belle boîte ci-dessus. Afin de rendre cette zone de faire quelque chose, nous avons besoin de prendre l'entrée, et faire que le filtre d'entrée de la liste. Alors que beaucoup de gens ont essayé de le faire manuellement, plusListView
Adapter
les classes viennent avec unFilter
de l'objet qui peut être utilisé pour effectuer le filtrage auto-magiquement. Nous avons juste besoin de tuyau de l'entrée de laEditText
dans leFilter
. S'avère que c'est assez facile. Pour exécuter un test rapide, ajoutez cette ligne à votreonCreate()
appelNotez que vous devrez enregistrer vos
ListAdapter
à une variable pour faire ce travail - j'ai sauvé maArrayAdapter<String>
de plus tôt dans une variable appelée "adaptateur".Prochaine étape est d'obtenir l'entrée dans le
EditText
. Cela prend un peu de réflexion. Vous pouvez ajouter unOnKeyListener()
à votreEditText
. Cependant, cet auditeur ne reçoit certains événements clés. Par exemple, si un utilisateur entre 'wyw", la saisie de texte prédictive sera probablement recommandé de "coup d'œil". Jusqu'à ce que l'utilisateur choisit 'wyw' ou 'oeil, votreOnKeyListener
ne recevrez pas un événement clé. Certains peuvent préférer cette solution, mais j'ai trouvé ça frustrant. Je voulais que chaque événement clé, j'ai donc eu le choix de filtrage ou pas de filtrage. La solution est unTextWatcher
. Il suffit de créer et ajouter unTextWatcher
à laEditText
, et passer leListAdapter
Filter
un filtre de requête à chaque fois que la modification du texte. N'oubliez pas de retirer leTextWatcher
dansOnDestroy()
! Voici la solution finale:exécution du programme sera la cause d'une force de fermeture.
Je swaped la ligne:
avec
pourrait être le problème? Qu'est-ce que le "@+building_list' pour?
j'ai eu un problème avec le filtrage,
que les résultats ont été filtrés, mais pas restauré!
donc, avant de filtrage (début de l'activité), j'ai créé une liste de sauvegarde..
(juste une autre liste contenant les mêmes données)
sur le filtrage, le filtre et listadapter est connecté à la première liste.
mais le filtre lui-même utilisé les données les données de la liste.
cela a permis de faire dans mon cas, que la liste a été mise à jour immédiatement, et même sur la suppression de recherche-terme des caractères de la liste est restauré avec succès dans tous les cas 🙂
merci pour cette solution, de toute façon.