ExpandableListView à plusieurs niveaux dans Android
Je suis en train de créer une arborescence à partir d'une inconnue de taille, ni au niveau de la liste de catégories. Donc, je suis en train de créer un générale liste extensible qui peut contenir 2+ nombre de niveaux.
L'idée générale est d'ajouter à chaque enfant qui a childs un autre ExpandableListView dans la disposition. Le problème est que le deuxième niveau de l'habitude de l'ouvrir, on dirait qu'il a rendue sur l'enfant ou de quelque chose. Voici quelques captures d'écran du résultat:
Voici comment ressembler avant l'ouverture de
Et après l'ouverture de la première option: (C'est censé être vide)
Et maintenant ouvrir le second: (A 4 childs et l'un d'eux a childs)
Comme vous pouvez le voir sur la troisième option semble que c'est rendu une autre option ou quelque chose sur elle, après le clic pour l'ouvrir:
Il ne fait rien, sauf à changer l'état de la flèche. Au moins il essaie de l'ouvrir...
Voici le code:
CatAdapter.java: (s'étend BaseExpandableListAdapter)
http://pastebin.com/6yUTkMbJ
Category.java:
http://pastebin.com/E7yWwpna
catitem.xml:
http://pastebin.com/G5MPT3Ua
L'utilisation:
http://pastebin.com/Wk0FqJhn
Désolé pour la longue question, j'essaye d'être clair possible.
Merci d'avance! Désolé pour mon mauvais anglais!
Edit:
J'ai fini par faire un affichage personnalisé pour cette tâche, je vous remercie tous pour vos réponses!
source d'informationauteur UnTraDe
Vous devez vous connecter pour publier un commentaire.
Je crois que le problème est dans votre
getChildView()
méthode:Quand vous rencontrez une 'extensible' enfant, vous êtes encore en les gonflant
R.layout.catitem
et d'ajouter votre nouveauelv
. Depuis lecatitem
est unRelativeLayout
et vous n'ajoutez tous les paramètres de l'alignement, de chaque point de vue est placé dans le coin en haut à gauche, la superposition de quoi d'autre est là.Vous pouvez essayer de changer
R.layout.catitem
d'avoir une verticaleLinearLayout
que sa racine. Cela devrait empêcher de chevauchement de l'enfant titre, mais je ne peux pas garantir que les enfants ne se chevauchent encore. C'est un changement facile, cependant, et vaut la peine d'essayer.Aussi, à partir de la documentation pour
ExpandableListView
:Qui dit "XML", donc je ne sais pas si cela veut appliquer le code ou pas. Il me semble que ce serait le même mécanisme, de sorte qu'il pourrait être intéressant de regarder dans. Je ne suis pas sûr de savoir comment vous alliez sur la définition d'une taille maximale pour le parent. Vous pouvez être capable de mesurer la taille d'un élément, et le multiplier par le nombre d'enfants. Vous auriez à prendre des marges/séparateurs en compte, de sorte qu'il peut ne pas être simple.
Si cela ne fonctionne pas, vous devrez peut-être rouler vos propres ViewGroup directement. Il ne devrait pas être trop difficile à mettre en œuvre à partir de zéro, il suffit de ne pas oublier d'essayer de profiter de la vue du recyclage(ce que votre méthode actuelle ne fait pas de toute façon).
J'ai été avoir même situation où j'ai dû utiliser
ExpandableList
et à chaque niveau, je devais avoirgroupPosition
etchildPosition
mais en utilisant le multi-niveauExpandableList
Il n'a pas été possible d'obtenir exactsgroupPosition
au deuxième niveau des données. De sorte que, j'ai utilisé une autre approche. J'ai donné un lien de démonstration que j'ai utilisé dans un projet.1) Dans cette bibliothèque, vous devez lier relation parent-enfant à l'avance avant de vous lier vos données réelles.
2) Dans votre
Layout
, plus haut de forme doivent êtreLinearLayout.
Veuillez vous référerheader.xml
,groups.xml
etchilds.xml
dans le lien de démonstration.Le Lien De Démonstration: MultiLevelTreeView
Grâce.