IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

ListView qui s'adapte à son contenu ?


Sujet :

Composants graphiques Android

  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut ListView qui s'adapte à son contenu ?
    Salut,

    Dans un LinearLayout, j'ai entre autres un ListView, qui a un adapter personnalisé (disons MyCustomAdapter).

    Dans cet adapter, je peux ajouter ou supprimer des éléments, et j'appelle notifyDataSetChanged() (hérité de BaseAdapter). La liste est bien notifiée, elle se met à jour.

    Par contre, sa hauteur ne change pas, à la place, elle utilise un scroll. Moi je voudrais que ma liste fasse toujours exactement la taille de son contenu, sans scroll.

    J'ai bien sûr défini son layout_height comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    android:layout_height="wrap_content"
    Merci de votre aide.

    EDIT: j'ai essayé d'appliquer cette propriété sur la ListView, sans succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    android:isScrollContainer="false"

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,


    Par contre, sa hauteur ne change pas, à la place, elle utilise un scroll. Moi je voudrais que ma liste fasse toujours exactement la taille de son contenu, sans scroll.
    Pour résumer tu aimerais avoir une liste qui affichent tout ses élements sur la même page, donc sans scroll ?

    Car là je ne visualise pas...

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Bonjour,




    Pour résumer tu aimerais avoir une liste qui affichent tout ses élements sur la même page, donc sans scroll ?

    Car là je ne visualise pas...
    La liste n'est qu'une partie de la page.
    Si tu veux, j'ai au plus haut niveau une ScrollView, qui contient des LinearLayout, contenant plein de choses (des TextView, des EditText, des ListView...).
    // oui, c'est pas top niveau ergonomie, mais l'appli que j'ai récupérée était comme ça

    Et dans le cas d'une ListView, je voudrais qu'elle prenne toute la place dont elle a besoin (le niveau le plus haut est scrollable de toute façon). Je ne veux pas qu'elle gère elle-même un scroll supplémentaire interne.

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Une image pour mieux comprendre :

  5. #5
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Salut,

    Donc si je comprend bien, tu veux faire une liste non scrollable qui affiche tous tes éléments d'un coup ?
    Dans ce cas là pourquoi utiliser une ListView ?
    Le composant permet, en dehors d'afficher une liste, d'optimiser les ressources (mémoire et CPU) du téléphone en évitant de créer trop d'instance de composants graphiques à la fois.
    Si tu as besoin de tout afficher, autant passer directement par un LinerLayout par exemple et d'y mettre tous tes composants enfants d'un coup, non ?

    Si tu as le droit de modifier un peu l'ergonomie, est ce qu'il ne serait pas plus simple d'avoir un premier bouton "select species" qui t'afficherai une popup contenant ta liste (avec son scroll naturel) ?

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par MrDuChnok Voir le message
    Salut,

    Donc si je comprend bien, tu veux faire une liste non scrollable qui affiche tous tes éléments d'un coup ?
    Dans ce cas là pourquoi utiliser une ListView ?
    Le composant permet, en dehors d'afficher une liste, d'optimiser les ressources (mémoire et CPU) du téléphone en évitant de créer trop d'instance de composants graphiques à la fois.
    Si tu as besoin de tout afficher, autant passer directement par un LinerLayout par exemple et d'y mettre tous tes composants enfants d'un coup, non ?

    Si tu as le droit de modifier un peu l'ergonomie, est ce qu'il ne serait pas plus simple d'avoir un premier bouton "select species" qui t'afficherai une popup contenant ta liste (avec son scroll naturel) ?
    En fait c'est une liste dynamique (le titre devrait plutôt être "selected species" et non "select species"), on peut en rajouter en cliquant sur "add photo" (qui devrait s'appeler aussi "add species", je n'ai pas modifié le texte encore), qui ouvre une nouvelle activité où on choisit une espèce qu'on associe à une photo (de la gallerie ou de l'appareil photo).

    Et si on clique longtemps sur un élément de la liste, on peut le supprimer (un menu contextuel s'ouvre avec un bouton "delete").

    C'est vraiment le principe d'une liste avec ses renderers et son adapter, sauf que je n'ai pas besoin du "recyclage" des renderers ni de l'économie des ressources (c'est une petite liste), je veux afficher tous les éléments que l'utilisateur a sélectionnés.

    Je cherche donc simplement à supprimer ce scroll et à ce que la liste s'adapte à son contenu.

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par ®om Voir le message
    C'est vraiment le principe d'une liste avec ses renderers et son adapter, sauf que je n'ai pas besoin du "recyclage" des renderers ni de l'économie des ressources (c'est une petite liste), je veux afficher tous les éléments que l'utilisateur a sélectionnés.
    Comme disait DuChnock... c'est exactement *ca* qu'ajoute ListView par rapport à n'importe quel autre layout: le recyclage des views, et le scrolling.... Si tu ne veux pas de ca, tu utilises un simple Layout... que tu popules dynamiquement (par code).
    A noter que tu fais déjà la plupart du code dans le ListAdapter...

  8. #8
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Comme disait DuChnock... c'est exactement *ca* qu'ajoute ListView par rapport à n'importe quel autre layout: le recyclage des views, et le scrolling.... Si tu ne veux pas de ca, tu utilises un simple Layout... que tu popules dynamiquement (par code).
    A noter que tu fais déjà la plupart du code dans le ListAdapter...
    Donc il n'y a vraiment pas d'autre solution ?

    Car le fait d'afficher les éléments dans une liste "complètement visible" ou "prenant une taille fixe mais avec un scroll" me semble être une option "de thème".

    À la limite, ça pourrait même être une option de l'appli ("voir tous les éléments de la liste" ou "en voir 3 et scroller"). De ce point de vue, il me paraît étrange qu'il faille recoder le comportement, alors que le mécanisme est générique (c'est juste une préférence d'affichage).

  9. #9
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    On pourrait imaginer également le comportement suivant : la liste s'adapte automatiquement à la taille du contenu, sauf si celui-ci dépasse 500px, dans ce cas le contenu est scrollé.

    Il faudrait qu'à tout moment, hauteur(liste) = min(500, hauteur(contenu)).

    Comment coderiez-vous un tel comportement ?

  10. #10
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Et ça peut pas être justement ça ta solution ?
    Tu lui donnes une taille fixe à ta liste (le minimum, donc 500 px), donc elle aura toujours cette taille là, et donc si elle a moins de 3 éléments, ça n'affichera pas de scroll (mais elle prendra une certaine place sur ton écran).
    Dès que ça dépasse 3 élements, les scroll apparaissent, mais ça devient plus une condition exceptionnelle, non ?

    Sinon, si tu veux vraiment maitriser le comportement, soit tu te créé un composant qui hérite de ListView dans lequel tu viens forcer les calculs de hauteur, soit tu hérites de LinearLayout dans lequel tu rajoutes une gestion plus simple des composants enfants.

  11. #11
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par MrDuChnok Voir le message
    Et ça peut pas être justement ça ta solution ?
    Tu lui donnes une taille fixe à ta liste (le minimum, donc 500 px), donc elle aura toujours cette taille là, et donc si elle a moins de 3 éléments, ça n'affichera pas de scroll (mais elle prendra une certaine place sur ton écran).
    Dès que ça dépasse 3 élements, les scroll apparaissent, mais ça devient plus une condition exceptionnelle, non ?
    C'est exactement ça, mais si le contenu prend moins que 500, alors je ne veux pas d'espace blanc inutile.

    Citation Envoyé par MrDuChnok Voir le message
    Sinon, si tu veux vraiment maitriser le comportement, soit tu te créé un composant qui hérite de ListView dans lequel tu viens forcer les calculs de hauteur, soit tu hérites de LinearLayout dans lequel tu rajoutes une gestion plus simple des composants enfants.
    Ne serait-il pas possible de calculer la somme des hauteurs de chacun des items ?

  12. #12
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Ne serait-il pas possible de calculer la somme des hauteurs de chacun des items ?
    Si mais je vois le merdier arrivé ... Par contre tu peux définir un taille fixe pour tes items et en fonction du nombre d'item tu peux reconstruire dynamiquement ta liste .

    Je te conseille cette méthode car créer la liste pour savoir la taille de tes items puis la détruire et la constuire en fonction de la taille trouvé, est à mon avis pas une bonne solution.

Discussions similaires

  1. Réponses: 9
    Dernier message: 14/12/2014, 09h32
  2. Réponses: 4
    Dernier message: 10/06/2009, 12h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo