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

Android Discussion :

Changer de Fragment depuis Fragment inconnu


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut Changer de Fragment depuis Fragment inconnu
    Bonjour à tous !

    J'ai créé une activité dont une partie du layout est fixe et l'autre est composée d'un fragment qui est appelé parmi 5 fragments disponibles.
    Suivant ce qui se passe dans mon activité, le fragment utilisé doit pouvoir être remplacé par un autre.

    Comment faire pour changer de fragment sachant qu'il n'est pas possible de prévoir à l'avance quel sera le fragment actif au moment du changement ?

    Je vous remercie d'avance !

  2. #2
    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
    une possibilité (parmi d'autres): le pattern "observer"

    Mais il y a encore plus simple, vu que le fragment connait son activité (il ne connait pas forcément le type par contre).
    Et que l'activité connait le fragment.

    L'activité connait les fragments puisqu'elle les instancie.
    On va donc la faire implémenter par exemple "IFragmentSelector":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    interface IFragmentSelector
    {
          // utiliser des noms plus explicites 
          public static enum FragmentType {
                   fragment_1,
                   fragment_2,
                   ...    
          };
     
          // la fonction à implémenter.
          public void selectFragment(FragmentType type);
    }
    L'activité va implémenter l'interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class MonActivity extends Activity implement IFragmentSelector
    {
           ....
     
           public void selectFragment(FragmentType type) {
                  ... 
                  // affichage du fragment choisi
                  ...
           }
    }
    Et chaque fragment va alors pouvoir sélectionner une "suite":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class MonFragment extends Fragment
    {
           // un évenement qui va devoir changer de fragment
           public void onNextButtonClicked()
           {
                ((IFragmentSelector)getActivity()).selectFragment(FragmentType.fragment_2);
           }
    }

    En ce qui concerne le véritable pattern observer....
    Le Fragment ne sait pas que l'activité implémente IFragmentSelector, par contre il a ce genre de fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class MonFragment extends Fragment
    {
           IFragmentSelector   selector;
     
           public void setFragmentSelector(IFragmentSelector s) { this.selector = s; }
     
           // un évenement qui va devoir changer de fragment
           public void onNextButtonClicked()
           {
                if (this.selector != null) 
                    this.selector.selectFragment(FragmentType.fragment_2);
           }
    }
    Et l'activité fait un joli: fragment.setFragmentSelector(this); à chaque nouvelle instanciation de fragment.

  3. #3
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Par défaut
    C'est l'explication qu'il fallait . C'est clair, net et simpliste. Tu mérites un +1 Nicroman.

    Christian,
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut
    Merci beaucoup Nicroman, tu es d'une redoutable efficacité !

    Un point de précision : les fragments que je veux invoquer ne contiennent que des textViews. Aucun bouton ni quoique ce soit du genre.
    Les fragments ne seront invoqués que par les éléments présents dans la partie fixe du layout de l'activité principale.

    Du coup, n'y a-t-il pas un moyen de faire encore plus simple ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Par défaut
    En fait, pour faire simple, chaque bouton de mon activité doit :
    - détruire le fragment en cours
    - afficher un nouveau fragment
    - dire au fragment d'exécuter une des méthodes qu'il contient

  6. #6
    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
    Dans ce cas pourquoi ne pas passer par la construction de vue dynamique qui sera géré par un fragment type que tu multiplieras.

    TU peux passer par les Arguments le nombre de TextView que tu veux ainsi que leur valeurs associé lors de sa construction.

    Cela et plus simple niveau code.

Discussions similaires

  1. Changer image d'un imageView dans un fragment depuis l'activity
    Par toufou dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 30/10/2014, 08h52
  2. Retrouver des fragments depuis le fragment manager
    Par roukish dans le forum Android
    Réponses: 0
    Dernier message: 16/05/2014, 11h14
  3. Raffraichissement des Fragments depuis l'activity
    Par stelincat dans le forum Android
    Réponses: 8
    Dernier message: 15/04/2014, 19h23
  4. Réponses: 7
    Dernier message: 12/07/2012, 11h58
  5. Compréhension d'un fragment de code inconnu
    Par Cyberstein dans le forum Langage
    Réponses: 5
    Dernier message: 22/01/2008, 18h43

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