Question

J'ai un ListView soutenu par un ArrayAdapter personnalisé, dans lequel chaque élément comporte 2 LinearLayouts - l'un que j'appelle tête et l'autre - body. Le corps est masqué (disparu) jusqu'à ce que l'utilisateur clique sur la ligne à laquelle il glisse. Le deuxième clic (sur la tête) cachera le corps. Cependant, si l'utilisateur clique sur le corps, cela amène une autre activité. Tout cela fonctionne très bien, voici le problème:

Lorsque l'utilisateur appuie sur le corps, je souhaite obtenir une indication visuelle de l'action, de la même manière qu'un élément de liste normal scintille sur un fond orange lorsqu'il est enfoncé. Je ne reçois pas cela par défaut car (ma théorie), l'événement onPress est intercepté par la vue du corps et n'est pas traité par l'élément de la liste.

La première chose que j'ai essayée a été d'exécuter body.setBackground('#ff00ff') (peu importe la couleur) dans un événement onPress. Cela n'a pas fonctionné depuis (je suppose) qu'il n'y a pas eu de repeinte après l'appel. Ensuite, j'ai creusé un peu plus et j'ai décidé d'utiliser un arrière-plan basé sur <selector/>. J'ai défini body_background.xml dans le dossier drawable et je l'ai affecté à la propriété d'arrière-plan du corps.

Là, j'ai remarqué que l'arrière-plan ne changerait que si le même est traité par la liste. Par exemple, si je règle <item android:state_selected="true" android:drawable="@drawable/selected"/>, lorsque j'appuie sur la tête, l'arrière-plan des deux éléments (la tête et le corps) changera, mais lorsque j'appuierai sur le corps: rien.

Donc, pour résumer ma question - comment puis-je changer l’arrière-plan de l’élément enfant dans l’élément de la liste si je lui assigne un gestionnaire onClick personnalisé? Tous les conseils seront grandement appréciés.

Était-ce utile?

La solution

OK Voici quelques informations supplémentaires que je creuse en cours de route.

  1. J'essaie actuellement de passer de l'implémentation à ExpandableListView, qui fournit les fonctionnalités que j'ai dû coder (corps glissant). Le problème que j’ai peut-être ici est que j’ai la fantaisie & "; Infini &"; implémentation de la liste et j'utilise la méthode ArrayAdapter # add pour ajouter dynamiquement des éléments à la liste lors du défilement (voir mon tutoriel sur androidguys.com ) La méthode add est absente de la BaseExpandableListAdapter. J'ai donc besoin de voir si l'ajout d'éléments à un tableau interne fonctionnera (cela n'a pas fonctionné.) pour ArrayAdapter) éventuellement en faisant ExpandableListView # notifyChanged () s’occupera de cela
  2. Le fait que je ne vois rien quand j'utilise directement la méthode setBackgroundColor est probablement dû à l'appel ultérieur de startActivity appel qui interrompt toute la peinture jusqu'à l'affichage de la nouvelle activité

P.S. cela a été résolu en passant à ExpandableListView. Et puis-je ajouter - c'est beau! Pas besoin d'inventer quoi que ce soit

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top