358 votes

Comment puis-je mettre un ListView dans une ScrollView sans qu’il s’effondre ?

J'ai cherché partout une solution à ce problème, et la seule réponse que je peux trouver, semble être de "ne pas mettre une ListView dans un ScrollView". Je n'ai pas encore de voir une réelle explication de pourquoi . La seule raison pour laquelle je peut sembler à trouver, c'est que Google ne pense pas que vous devriez vous voulez à faire. Eh bien, je ne, je l'ai fait.

Donc la question est, comment pouvez-vous mettre une ListView dans un ScrollView sans qu'il s'effondre à sa hauteur minimale?

263voto

DougW Points 9027

Voici ma solution. Je suis relativement nouveau pour la plateforme Android, et je suis sûr que c’est un peu hackers, surtout dans la partie sur appel .measure directement, et définissant le LayoutParams .height propriété directement, mais ça marche.

Tout ce que vous avez à faire est appel Utility.setListViewHeightBasedOnChildren(yourListView) et elle seront redimensionnées pour adapter exactement la hauteur de ses éléments.

198voto

Romain Guy Points 57114

En utilisant un ListView à faire pas de défilement est extrêmement coûteux et va à l’encontre de l’objet de ListView. Vous ne devriez pas faire cela. Il suffit d’utiliser à la place un LinearLayout.

89voto

XYZ Points 2550

Cela fonctionnera certainement...
Vous devez juste remplacer votre dans le fichier XML de mise en page avec ce comme ``

25voto

Arun Points 841

Insted de mettre listview à l’intérieur d’un affichage à défilement, nous pouvons utiliser la vue liste comme un affichage à défilement. Choses qui doit être en mode liste peuvent être mis à l’intérieur de la listview. Autres mises en page en haut et en bas de listview peuvent être mis en ajoutant des mises en page à en-tête et pied de page de listview. Si le listview ensemble vous donnera une expérience de défilement.

21voto

djunod Points 1029

Il y a beaucoup de situations où il fait beaucoup de sens d’avoir de ListView dans un ScrollView.

Code est basée sur la suggestion de DougW... travaux dans un fragment, prend moins de mémoire.

Appelez setListViewHeightBasedOnChildren(listview) sur chaque listview intégré.

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