2010-03-10 4 views
2

Je veux certains des goodies dans un ListView, comme être capable d'utiliser un ListAdapter, et la sélection d'éléments, etc, mais je ne veux pas la partie ScrollView de celui-ci. Je veux mettre en œuvre cette partie moi-même, d'une manière différente (pourquoi ou comment je fais cela n'est pas vraiment le point de cette question, alors s'il vous plaît ne demandez pas "pourquoi").Comment créer un ListView qui n'est pas dans un ScrollView, ou est-ce que le ScrollView est désactivé?

Existe-t-il un moyen d'avoir un ListView qui n'est pas dans un ScrollView ou a le défilement désactivé?

Répondre

1

Un ListView n'est pas dans un ScrollView. Un ListView fait défilement instrinsically. Je ne crois pas que vous pouvez désactiver le défilement à travers une API simple. Si c'est le cas, vous devez choisir entre ListView et essayer de contourner les comportements de défilement, cloner ListView et éliminer les comportements de défilement, ou écrire le vôtre AdapterView qui rend les choses comme vous le souhaitez.

+0

Ok, Je vais en faire un. – synic

6

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); 
+0

Vos commentaires ici ont été incroyablement utiles. Je vous salue. –

Questions connexes