Une autre façon de faire est d'envelopper le ListView
dans n'importe quelle solution de défilement personnalisée que vous avez concoctée. Si vous définissez simplement la hauteur du ListView
pour être exactement aussi élevée que toutes les lignes (en utilisant la vue de liste LayoutParams
), alors il agira comme une vue normale et ne pourra pas défiler; par conséquent, vous pouvez l'ajouter à une autre vue déroulante. La difficulté avec cette méthode est que vous devez connaître la hauteur de votre liste à l'avance, vous devez donc connaître la hauteur de chaque rangée. De plus, cela créera toutes les lignes à la fois et vous ne pourrez donc pas profiter de la fonctionnalité de recyclage des vues.
Si vous n'avez pas un moyen facile de calculer la hauteur à l'avance, vous pouvez tromper le ListView
en pour vous faire en remplaçant onMeasure
et en lui donnant votre propre spécification de la hauteur:
// Calculate height of the entire list by providing a very large
// height hint. But do not use the highest 2 bits of this integer;
// those are reserved for the MeasureSpec mode.
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
Ok, Je vais en faire un. – synic