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 :

Changement de page dans une View


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Par défaut Changement de page dans une View
    Bonjour

    J'ai une vue dont je souhaite modifier le contenu dynamiquement sur un événement de style changement de page.
    Après quelques recherches, je n'ai trouvé que le ViewPager pour gérer ces événements; mais si la gestion des événements y est bien présente, il impose aussi un changement de View (ou Fragment) à chaque changement de page, ce que je ne veux pas, ainsi qu’un chargement de 3 pages par défaut (mais je n’ai vu nulle part que cela était modifiable).
    J'ai donc deux questions:
    - est-il possible de gérer les événements style changement de page dans d'autres objets plus simples?
    - est-il possible d'utiliser un ViewPager avec une seule View (mais pas avec un nombre de pages à 1, ce qui empêche toute navigation), en gérant les événements via onPageSelected pour modifier le contenu de la View, mais en bloquant tout remplacement de la View affichée?

    Merci d'avance pour votre aide.

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Par défaut
    Salut
    -----

    Après quelques recherches, je n'ai trouvé que le ViewPager pour gérer ces événements; mais si la gestion des événements y est bien présente, il impose aussi un changement de View (ou Fragment) à chaque changement de page, ce que je ne veux pas
    Les fragments, c'est justement fait pour ça. Pourquoi n'en veux-tu pas? Peut-être simplement parce que tu as "raté" quelque chose.
    Sinon, si tu changes le contenu dynamiquement, ça va t'obliger de tout déclarer par code au lieu d'utiliser le XML et l'éditeur graphique: Ça reste possible mais ça mélange la présentation avec le métier, et de plus c'est moins convivial à faire.

    ainsi qu’un chargement de 3 pages par défaut (mais je n’ai vu nulle part que cela était modifiable).
    C'est toi qui définit combien de pages doivent rester en mémoire. Mais c'est clair que si tu veux une transition animée vers la gauche ou vers la droite qu'il faut au minimum que la page gauche et droite soit déjà créées, sinon comment faire? Maintenant, si tu bloques les glissements d'écran tu peux utiliser des fragments sans ViewPager et passer d'un fragment à l'autre par simple appel depuis ton programme

    est-il possible de gérer les événements style changement de page dans d'autres objets plus simples?
    Tu peux créer une activité par "page", ou créer des fragments et naviguer d'un à l'autre par code.
    Le ViewPager, ça te sert surtout si tu veux naviguer en faisant "glisser" ton écran vers la droite ou vers la gauche (par défaut), sinon tu n'en as pas besoin (je simplifie un peu).

    est-il possible d'utiliser un ViewPager avec une seule View (mais pas avec un nombre de pages à 1, ce qui empêche toute navigation), en gérant les événements via onPageSelected pour modifier le contenu de la View, mais en bloquant tout remplacement de la View affichée?
    Le ViewPager fait défiler les vues. S'il n'y a qu'une vue il ne saurait pas la faire défiler et donc il ne sert pas à grand chose.
    Tu peux soit te passer du ViewPager, soit bloquer les évènements de glissement avec le doigt et/ou de transitions "animées" lors d'un changement de page par soft.
    Le nombre de page en mémoire est définissable, mais si tu ne veux qu'une seule page en mémoire, travaille avec les fragments sans ViewPager.

    Sous réserve que j'ai bien compris les questions
    A+
    Claude

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Par défaut
    Claude, merci pour ta réponse.
    Je précise certains points, ça n'était peut-être pas très clair dans ma question...

    Citation Envoyé par ClaudeBg Voir le message
    Les fragments, c'est justement fait pour ça. Pourquoi n'en veux-tu pas? Peut-être simplement parce que tu as "raté" quelque chose.
    Sinon, si tu changes le contenu dynamiquement, ça va t'obliger de tout déclarer par code au lieu d'utiliser le XML et l'éditeur graphique: Ça reste possible mais ça mélange la présentation avec le métier, et de plus c'est moins convivial à faire.
    Peut-être que j'ai raté quelque chose, en effet. Mais de ce que j'ai compris, les fragments, ce sont des éléments de présentation qu'on peut en effet définir par XML. Mais le contenu que je veux afficher vient directement d'une bibliothèque qui le construit, et je veux juste l'afficher toujours dans la même page (définie, elle, par XML).


    Citation Envoyé par ClaudeBg Voir le message
    C'est toi qui définit combien de pages doivent rester en mémoire. Mais c'est clair que si tu veux une transition animée vers la gauche ou vers la droite qu'il faut au minimum que la page gauche et droite soit déjà créées, sinon comment faire? Maintenant, si tu bloques les glissements d'écran tu peux utiliser des fragments sans ViewPager et passer d'un fragment à l'autre par simple appel depuis ton programme
    Ah, j'ai dû rater ça dans la doc. Je n'ai pas vu de propriété ou méthode pour modifier ce nombre de pages; je vais relire…
    Je ne veux pas bloquer les glissements d'écran; au contraire, c'est ce que je recherche. Par contre, en utilisation courante, ils seront peu utilisés, donc je voulais éviter de faire précalculer à la bibliothèque des pages/fragments qui ne seront pas utilisés (le faire uniquement à la demande, même si cela fait un peu de latence).


    Citation Envoyé par ClaudeBg Voir le message
    Le ViewPager, ça te sert surtout si tu veux naviguer en faisant "glisser" ton écran vers la droite ou vers la gauche (par défaut), sinon tu n'en as pas besoin (je simplifie un peu).
    C'est exactement ce que je veux, mais en gérant moi-même le changement de page (donc uniquement l'événement, pas l'affichage).


    Citation Envoyé par ClaudeBg Voir le message
    Le ViewPager fait défiler les vues. S'il n'y a qu'une vue il ne saurait pas la faire défiler et donc il ne sert pas à grand chose.
    Tu peux soit te passer du ViewPager, soit bloquer les évènements de glissement avec le doigt et/ou de transitions "animées" lors d'un changement de page par soft.
    Ce n'est pas directement le ViewPager qui m'intéresse, ce sont les événements déclenchés sur les glissements page droite/page gauche. Mais c'est le seul objet que j'ai trouvé qui dispose de ces événements.

    Encore merci pour ton aide.

    A+

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Par défaut
    Salut
    -----

    Peut-être que j'ai raté quelque chose, en effet. Mais de ce que j'ai compris, les fragments, ce sont des éléments de présentation qu'on peut en effet définir par XML. Mais le contenu que je veux afficher vient directement d'une bibliothèque qui le construit, et je veux juste l'afficher toujours dans la même page (définie, elle, par XML).
    OK. Alors il te faut utiliser dans ta vue principale un container qui présente les caractéristiques qui t'arrangent pour mettre ton contenu. Et le contenu de ton container, ça peut être un fragment, que tu "permutes" par code.
    Maintenant, c'est clair que si tu n'as jamais deux fois le même contenu dans ton container, que les fragments ne servent pas à grand chose. Tu peux construire un fragment statique dont le contenu change (images incluses, textes, éléments rendus visibles ou invisibles etc), mais si c'est toute la structure du fragment qui change à chaque fois, alors à part créer les éléments par code, tu n'as pas beaucoup d'alternatives.

    Ah, j'ai dû rater ça dans la doc. Je n'ai pas vu de propriété ou méthode pour modifier ce nombre de pages; je vais relire…
    Regarde du côté de setOffscreenPageLimit

    Note que, comme je te l'indiquais, si tu veux le glissement entre deux pages, alors le ViewPager doit avoir la page suivante et précédente déjà construites, sinon il ne sait pas visualiser la page qui arrive.

    donc je voulais éviter de faire précalculer à la bibliothèque des pages/fragments qui ne seront pas utilisés (le faire uniquement à la demande, même si cela fait un peu de latence).
    En fait, c'est le viewPager qui réclame le fragment à afficher et non toi qui décide quand le créer: Tu dois le créer directement dans le get du ViewPager et non le créer quand ça t'arrange et le passer ensuite déjà construit au ViewPager. Bref, avec un ViewPager tu ne maîtrises pas l'instant de création d'un fragment.

    Si tu veux passer d'une page à l'autre, soit tu auras les pages consécutives déjà construites (auxquelles tu peux évidemment passer des infos pour les modifier) puisqu'elles arriveront par le côté. Soit tu n'as pas les pages déjà construites et donc tu ne peux pas faire "glisser" tes pages qui n'existent pas, du coup. Par contre, dans ce dernier cas, tu peux capturer les mouvements de glissement du doigt de l'utilisateur pour implémenter tes propres méthodes de commutation de page, sans passer par le ViewPager, et donc en maîtrisant la création des pages.

    C'est exactement ce que je veux, mais en gérant moi-même le changement de page (donc uniquement l'événement, pas l'affichage).
    Si tu passes par un ViewPager, c'est lui qui gère tout: Le changement de page mais aussi l'instant de leur création (peut dépendre de la mémoire disponible, de la valeur de setOffscreenPageLimit etc. J'ai déjà tenté d'utiliser un ViewPager en lui fournissant les pages déjà construites et lui laisser les afficher, mais ça ne fonctionne pas correctement: Il faut implémenter la construction de la page dans le ViewPager lui-même, et lui il crée ces pages quand ça l'arrange et non quand l'utilisateur commence à scroller.

    Si c'est juste l'évènement de glissement du doigt qui t'intéresse, il n'y a pas besoin pour ça d'utiliser un ViewPager. Regarde du côté des "gestures":
    http://www.vogella.com/tutorials/And...s/article.html

    A+
    Claude

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Par défaut
    Merci pour ton aide, Claude.
    Je vais regarder tout ça, mais ces éléments sont précieux, et je pense que j'ai ce qu'il faut pour m'en sortir.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/02/2015, 17h18
  2. [flash] ouvrir une page dans une frame différente
    Par viena dans le forum Intégration
    Réponses: 6
    Dernier message: 01/08/2007, 15h54
  3. Réponses: 4
    Dernier message: 30/10/2006, 00h53
  4. Changements de colonnes dans une BDD MySQL
    Par arnaud_verlaine dans le forum Requêtes
    Réponses: 8
    Dernier message: 07/08/2003, 11h33
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

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