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?
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
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
@ 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