2010-10-18 2 views
2

J'ai un ListView avec des éléments personnalisés - 3 ImageViews et un TextView. J'ai un appel à setItemsCanFocus(true), donc je peux rendre le ImageViews cliquable. J'utilise actuellement SimpleAdapter pour remplir la vue.ListView et la propagation des événements de clic à partir des vues enfants dans les éléments

Je souhaite déclencher l'événement onItemClick de AdapterView lorsque l'un de ces sous-affichages est cliqué. Le onItemClickListener reçoit une vue en tant que deuxième argument et peut être utilisée pour identifier la sous-vue sur laquelle vous avez cliqué. Franchement, je m'attendais à ce que ce soit le comportement par défaut, mais ce n'est pas le cas, malheureusement.

Existe-t-il un moyen d'implémenter ce comportement sans briser l'encapsulation (c.-à-d. En créant un adaptateur qui contient une référence à sa vue)?

Quelle est la manière acceptée de gérer les événements à partir des vues dans les éléments de la liste? Comment empêchez-vous l'adaptateur d'en savoir trop sur ListView?

Répondre

3

Malheureusement, vous devez choisir entre onItemClick() ou onClick() pour chaque enfant. Une façon de le faire cependant est de rendre l'affichage de haut niveau de chaque élément cliquable.

+0

Droite. Donc, je viens de rompre l'encapsulation en enregistrant un 'OnClickListener' avec l'adaptateur et en le passant à chacune des vues enfants. Merci pour votre réponse! – Delyan

+0

Je rencontre le même problème, mais setonitemclicklistener montre l'exception nullpointer pour moi et aucune réaction pour onListItemclick(). Je veux cliquer sur le bouton enfant, et chaque clic sur le bouton permet d'effectuer une activité différente. – DJhon

+0

@ Delyan, @ RomainGuy - pour m'aider à comprendre la solution, vous devez créer un OnClickListener dans newView() de la classe de l'adaptateur? Cela signifie que s'il y a 10 éléments de liste visibles sur l'écran, newView() sera appelé 10 fois et 10 OnClickListeners seront enregistrés, un pour chaque élément visible. J'ai essayé ceci et cela fonctionne ... mais est ce que vous vouliez réellement dire? – faizal

4

La définition de android:addStatesFromChildren="true" dans la liste de vos xml enverra des clics sur l'élément enfant à la méthode onItemClick dans le onItemClickListener connecté à votre liste.

Questions connexes