Normalement, nous ne nid pas ListView dans ScrollView, mais c'est OK si l'intervieweur insiste pour que je niche.
L'ajout d'un ListView à un ScrollView entraînera l'incomplet du contrôle ListView, et généralement un seul sera affiché. Quelle est la raison?
Le conflit d'événements de défilement entre les deux contrôles entraîne . Par conséquent, il est nécessaire de calculer la hauteur d'affichage de ListView via le nombre d'éléments dans le ListView pour le rendre complètement affiché. La méthode suivante est fournie pour votre référence.
La solution est la suivante:
lv = (listView) findViewByid (r.id.lv); adaptateur = new MyAdapter (); lv.setAdapter (adaptateur); setListViewHeightBasedOnchildren (LV); --------------------------------------------------- public void setListViewHeightBasedOnchildren (ListView ListView) {ListAdapter listAdapter = listView.getAdapter (); if (listAdapter == null) {return; } int totalHeight = 0; pour (int i = 0; i <linchapter.getCount (); i ++) {voir listItem = lisdapter.getView (i, null, listView); listItem.Measure (0, 0); TotalHeight + = listItem.getMeasuredHeight (); } ViewGroup.LayoutParams params = listView.getLayoutParams (); params.height = totalHeight + (listView.getDividerHeight () * (lisdAdapter.getCount () - 1)); params.height + = 5; listView.setLayoutParams (params); }La meilleure façon de le gérer à ce stade est: personnalisé ListView, surcharger la méthode OnMeasure () et définir tous les affichages.
import Android.Widget.ListView; / ** * * @description: une implémentation simple de ListView intégrée dans ScrollView * * @File: ScrollViewWithListView.java * * * @version * / public class ScrollViewWithListView étend ListView {public ScrollViewWithListView (Android.Content.Context Context, Android.util.AttriButeSet attrs) {super (context, attrit), Android.util.AattribeSet Attrs) {super (context, attrit), Android. } / ** * Integer.max_value >> 2. Si non définie, le paramètre par défaut du système est d'afficher deux pièces * / public void OnMeasure (int widthMeasurespec, int lightMeasurespec) {int expandSpec = measrespec.MakeMeasurespec (Integer.max_value >> 2, mesures super.onmeasure (widthmeasurespec, expandSpec); }}Le contenu ci-dessus est la solution pour intégrer ListView dans ScrollView que l'éditeur vous a présenté. J'espère que ce sera utile à tous!