2010-05-31 8 views
1

Je viens de commencer ma carrière en tant que programmeur android, et je m'appuie actuellement beaucoup sur l'exemple de code et les exemples api. J'ai travaillé avec this api example, pour produire une liste extensible d'éléments (notez que cet exemple n'utilise pas ExpadableListView). En jouant avec l'exemple, j'ai essayé d'ajouter un autre widget qui deviendrait visible et disparu en même temps que le texte (mDialogue dans l'exemple de code). Cela fonctionne bien avec un autre TextView, mais dès que j'ai essayé d'ajouter un widget de bouton, il a cessé de fonctionner. La liste s'étendrait au premier clic, affichant mes TextView et Button cachés, mais elle ne disparaîtrait pas lors d'autres clics. Le bouton est cependant cliquable et j'ai pu configurer un écouteur onClick pour changer le texte du bouton.Sur Android, cliquez pour développer la liste -et-cliquez sur un bouton?

Je commence à me demander, est-il simplement impossible d'avoir un élément cliquable dans un élément de liste cliquable? Ou y a-t-il une sorte de travail? Cela résoudrait-il mon problème si j'utilisais ExpandableListView?

Répondre

4

Vous avez deux options pour gérer le focus dans un ListView contrôlé par ListView#setItemsCanFocus(boolean). Si vous souhaitez que les vues individuelles d'un élément de liste se concentrent afin que l'utilisateur puisse interagir avec elles individuellement plutôt qu'avec l'élément de liste dans son ensemble, appelez-le en lui passant le true. false est le comportement par défaut. Le comportement par défaut où ListView gère le focus et les clics de l'élément est essentiellement un raccourci/optimisation pour le cas courant où l'élément entier agit comme une seule unité du point de vue de l'interaction, mais sa disposition peut être complexe. Lorsque vous dites à ListView que ses éléments peuvent se concentrer, il désactive ce comportement spécial et vous devez utiliser les mécanismes plus traditionnels de gestion des événements sur les vues dans les éléments de la liste. (Auditeurs, substitués sur * méthodes, etc.)

Mais pourquoi vos éléments de liste cessent-ils de prendre des clics lorsque votre ListView n'est pas configuré pour les éléments pouvant être mis au point? ListView génère uniquement des événements de clic sur un élément si l'affichage de l'élément de liste renvoie false à partir de View#hasFocusable(). Cela signifie qu'aucun enfant de l'élément de liste ne peut être mis en focus si vous souhaitez recevoir des événements de clic sur un élément. Dès que votre bouton devient visible, l'élément de liste a un enfant pouvant être mis au point et ne recevra plus d'événements de clic sur l'élément de liste.

+0

Ahh ... je vois! Une fois que je l'ai changé à button.setFocuasable (faux) alors tout s'est comporté comme prévu. Merci pour l'explication! Cela semble moins comme la magie noire maintenant. – Aurora

+0

avez-vous réussi à développer/réduire le groupe avec un bouton au lieu de la ligne entière? – Maxrunner