2009-10-06 8 views
11

J'ai plusieurs ListViews dans un LinearLayout. C'est la liste des choses par jour, donc j'ai un TextView contenant "Sunday:" suivi d'une liste d'éléments, suivi d'un "Monday" TextView, etc. Fonctionne bien, mais ne rentre pas dans l'écran. J'ai donc ajouté un ScrollView en tant que parent du LinearLayout. Maintenant, il défile, mais les ListViews ont tous de la place pour 2 entrées, qu'elles aient 0 ou 3 entrées. Quelque chose à propos de l'ajout du parent ScrollView a entraîné la taille dynamique de ListViews. J'ai essayé d'appeler requestLayout() sur ScrollView après que les adaptateurs de liste aient rempli leurs vues, mais cela n'a rien fait. Des idées?Problème de mise en page Android ScrollView

Editer: De http://www.anddev.org/viewtopic.php?p=25194 et d'autres liens, il semble que ListViews à l'intérieur d'un ScrollView ne sont pas gérés correctement. Quelqu'un a une bonne suggestion pour mettre en œuvre une liste de listes?

+0

Pouvez-vous poster votre mise en page xml? Avez-vous configuré Android: layout_height = "wrap_content" ou similaire dans vos ListViews? – svens

+0

Je n'ai pas accès à la disposition pour l'instant .. Toutes les vues à l'intérieur de LinearLayout ont layout_height = "wrap_content", LinearLayout et ScrollView ont layout_height = "fill_parent" (essayé wrap_content sur le LinearLayout). Commentant le ScrollView, tout se déroule correctement, mais disparaît de l'écran .. – Aaron

+0

Obtenez vos ListViews dans un ListView? :) Si je comprends bien, vous voulez faire une liste de tous les jours de la semaine dans un TextView avec un ListView ci-dessous. Cela devrait être implémentable dans un adaptateur personnalisé. Voir la réponse à ma question http://stackoverflow.com/questions/1505751/android-binding-data-from-a-database-to-a-checkbox-in-a-listview qui décrit comment étendre ResourceCursorAdapter. Peut-être que cela vous aide à construire un adaptateur qui remplit un ListView avec votre ListViews + Légende en semaine. – svens

Répondre

14

Je m'intéresse à ce sujet aussi, j'ai donc fait un peu de recherche. Premièrement: Ne jamais mettre un ListView dans un ScrollView (comme vous l'avez découvert vous-même). Malheureusement googler ce problème ne mène à aucune solution, donc j'ai essayé ma suggestion de mon commentaire ci-dessus.

J'ai implémenté un ListAdapter personnalisé et j'ai placé ListViews dans un ListView parent. Cela ne fonctionne pas (conduit au même problème qu'avec un ScrollView). Parlant aux gars sur le android-irc officiel android-irC# android-dev sur freenode, ils m'ont dit que mettre ListViews dans un ListView est aussi mauvais, voire pire, que de les mettre dans un ScrollView. Malheureusement, ils ne pouvaient pas m'aider avec le problème.

Il semble y avoir une seule façon de réaliser ce que vous voulez faire; voir la réponse à cette question similaire Scrolling with Multiple ListViews for Android. L'idée est de fusionner tous ListViews en un seul par un adaptateur personnalisé et d'insérer une sorte d'en-têtes entre les entrées. C'est absolument faisable mais cela peut demander un effort particulier.

+1

pourquoi ne devriez-vous pas mettre des listes de lecture dans les scrollviews? – MalcomTucker

+16

parce qu'ils explosent. – stealthcopter

6

Je sais qu'il est tard pour répondre à ce moment, mais encore - il peut être utile à d'autres qui arrivent ici en cas de problèmes similaires.

Je vous suggère d'utiliser un ListView extensible pour cela. Cela résoudrait tous vos problèmes. Vous pouvez avoir le nom principal/parent comme celui de la semaine, et quand vous le développez, vous auriez la liste des entrées pour ce jour/semaine/quoi que ce soit. En outre, vous ne seriez pas à vous soucier de défilement car il est pris en charge par Android :)

Si vous l'essayez, alors s'il vous plaît laissez-moi savoir si cela fonctionne pour votre problème Essayez des exemples sur Expandable ListView.

edit: par exemple vérifier ici - http://mylifewithandroid.blogspot.com/2008/05/expandable-lists.html

+0

vraiment, les vues de liste extensible sont le chemin à parcourir – Axarydax