/ / ListView avec ArrayAdapter montrant seulement 1 élément pour height wrap_content - android, android-layout, listview, android-listview, android-arrayadapter

ListView avec ArrayAdapter montrant seulement 1 élément pour height wrap_content - android, android-layout, listview, android-listview, android-arrayadapter

"Je rencontre un problème où ListView n’affiche qu’une ligne, même si ArrayList contenant des données contient 2 éléments.

Pour clarification, OUIJ'utilise ListView à l'intérieur d'un ScrollView, mais pour le compenser, j'utilise ExpandableHeightListView personnalisé (extrait de l'une des réponses sur SO), ce qui est utile à cet effet. Cette liste ne peut pas défiler. Il a une hauteur fixe.

De plus, au sein de la même ScrollView, quelques autres ListView fonctionnent correctement, mais celui-ci, ListView, ne fonctionne pas correctement.

Aller plus loin, quand j’ai connecté le position valeur de variable dans la méthode getView (), elle est toujours 0 pour cette liste, alors que pour d’autres, elle augmente séquentiellement.

J'ai "comparé les deux codes de l'Adaptateur et ils sont identiques mais ListView actuel ne fonctionne toujours pas.

J'ai essayé avec la méthode getView (), mais en vain.

Toute aide appréciée.

MODIFIER

Si je donne une hauteur fixe à ListView comme 250dp, les deux lignes sont affichées mais elle ne montre qu'une ligne avec hauteur définie sur wrap_content

Réponses:

6 pour la réponse № 1

C’est un problème très courant, pour résoudre ce problème, vous devez lire et mettre en œuvre Cette solution de contournement.

Dans mon cas, cela fonctionne parfaitement. vous devriez aussi essayer.


1 pour la réponse № 2

Comme je sais que ListView dans un scrollView ne fonctionne pas correctement.

Parce que les deux widgets ont défiler afin qu'ils ne fonctionnent pas bien.

Je recommande donc de supprimer le ScrollView

Merci..


1 pour la réponse № 3

Je sais que ce n’est pas ce que vous voulez entendre, mais sérieusement, peu importe ce que vous programmez, envisagez de l’afficher sur des onglets ou similaire, de sorte que vous n’ayez pas besoin du défilement.

Si vous devez vraiment avoir autant de données sur un seul écran, envisagez d'utiliser quelque chose comme un LinearLayout avec un adaptateur pour afficher vos données.

Les vues de liste ne sont pas conçues pour fonctionner à l'intérieur d'unscrollview car ils sont eux-mêmes scrollables. Vous pouvez "bidouiller" votre chemin, mais ce n’est pas agréable. Si vous avez vraiment besoin des fonctionnalités fournies par la liste, pensez à diviser vos écrans en onglets, en affichant une liste ou deux dans chaque onglet.


0 pour la réponse № 4

Cette solution a fonctionné pour moi et ajuste également lamise en page automatiquement. Sur l'adaptateur ListView de niveau supérieur, à l'intérieur de la méthode getView (), vous allez créer une vue qui référence une mise en page avec un autre ListView. En supposant que ListView "interne" soit déclaré comme "listView" avec son adaptateur appelé "adaptateur", essayez d'utiliser le code ci-dessous. Assurez-vous également que la présentation ListView interne est définie sur WRAP_CONTENT afin que, même si la hauteur soit correcte, les contraintes de présentation ne la remplacent pas.

listView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
listView.getLayoutParams().height = adapter.getCount() * {whatever your list item height is}  OR do something else to add up all of the heights;
listView.requestLayout();
listView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
}
);