2 votes

Comment utiliser une ListView à l'intérieur d'une ExpandableList ?

J'ai travaillé avec une ExpandableList personnalisée (voir l'exemple ci-dessous) où chaque élément a toujours un enfant. Cet enfant se compose de trois parties. Chaque partie comporte un en-tête (barres rouges) et, en dessous, un élément Empty OU une liste d'éléments. La longueur de cette liste peut varier.

La première façon dont j'ai essayé de le faire est d'ajouter un ViewStub sous l'élément vide, que j'ai gonflé avec une vue personnalisée, qui contenait également un ViewStub à la fin que j'ai gonflé à son tour pour l'élément suivant, ajoutant ainsi des éléments de manière récursive pour créer cette sorte de liste d'éléments. Malheureusement, cela a entraîné des StackOverflowError lorsque la liste devenait trop longue (avec des listes courtes, cela fonctionnait parfaitement).

Lors de ma deuxième tentative, j'ai donc essayé d'utiliser un ListView avec un adaptateur personnalisé à la place. Malheureusement, cette liste n'utilisait qu'une petite partie de mon écran et le reste des éléments était caché derrière l'en-tête de la partie suivante (cette mini liste semblait pouvoir être scrollée car une seconde barre de défilement apparaissait à côté d'elle, mais elle ne défilait pas. Non pas que je considérerais ce défilement à l'intérieur d'une liste défilante comme une bonne solution, mais je voulais juste le mentionner).

Est-ce que quelqu'un peut me dire comment je peux dire à cette liste d'éléments de ne pas être scrollable et de prendre toute la place dont elle a besoin (est-ce qu'elle sait quelle taille elle va avoir quand le noeud enfant est créé ? ?) ou m'aider avec une solution alternative à mon problème ? (Ooh, et j'ai envisagé de mettre une quantité impie de ViewStubs à l'intérieur de mon layout, mais cela semble tout simplement idiot et vraiment une mauvaise pratique. Corrigez-moi si je me trompe)

alt text

1voto

metter Points 920

Si j'ai bien compris, pourquoi ne pas prendre une ExpandableList + Adapter qui implémente ExpandableListAdapter ? C'est une approche un peu moche, mais elle fonctionne et n'est pas très compliquée.

MyAdapter implémente ExpandableListAdapter

@Override
public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {

}

Dans cette méthode, vous pourriez simplement déterminer si la position actuelle de l'enfant est l'un des en-têtes ou l'un des enfants et gonfler la vue appropriée à partir de xml.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X