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

  1. #1
    Membre du Club
    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
    Points : 54
    Points
    54
    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 éminent

    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
    Points : 7 618
    Points
    7 618
    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.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  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
    Points : 1 493
    Points
    1 493
    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 du Club
    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
    Points : 54
    Points
    54
    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 du Club
    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
    Points : 54
    Points
    54
    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 éminent

    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
    Points : 9 149
    Points
    9 149
    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.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  7. #7
    Membre du Club
    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
    Points : 54
    Points
    54
    Par défaut
    Je suis d'accord mais je t'avoue que je ne maîtrise pas trop cette méthode.
    De plus, l'agencement des textviews change suivant le nombre de textviews présents. Et là, je suis perdu...

  8. #8
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Alors si tu n'es pas chaud pour cette méthode la solution de Nicroman reste la plus simple à mes yeux, c'est à dire de passer par un managerSwitch de fragment qui reliera tes Fragments à ton activité, à toi de développer ton interface pemettant d'avoir les fonctions requises au fonction de ton manager .

    Donc dans son exemple le manager se trouve dans son Activité

    dire au fragment d'exécuter une des méthodes qu'il contient
    Pour ce point fait une class mère abstraite pour tout tes fragments qui contiendra une méthode abstraite que tes fragments fils devront implémenté et qui sera celle que tu recherches.
    Comme cela depuis ton activité tu controle que le fragment est bien un fils de cette classe mère puis tu appelles cette fonction générique qui elle fera le taf en fonction du fragment fils.

    - détruire le fragment en cours
    - afficher un nouveau fragment
    A toi d'implémenter ton interface si tu souhaites appeler ces fonctionnalité depuis tes fragments, de même pour l'éxécution de tes méthodes si tu souhaites l'avoir depuis tes autres fragments .
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  9. #9
    Membre du Club
    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
    Points : 54
    Points
    54
    Par défaut
    Effectivement tu as raison, la solution de Nicroman semble être la plus adéquate.
    Etant un débutant, je ne saisi pas tout le sens de certaines lignes. Du coup je ne sais pas trop comment adapter le code à mon activité.

    A la base je pensais pouvoir faire très simple, du genre :
    - dans le layout de mon activité, j'ai des boutons et un fragment auquel j'ai donné un id et défini la classe du fragment par class="com.vahia.monappli.FragmentDeBase"
    - au clic sur un bouton j'exécute une méthode de mon activité qui récupère le fragment par son id puis id.setClass="com.vahia.monappli.FragmentSecondaire"
    - ensuite je tue le fragment existant avec FragmentDeBase.finish();
    - puis j'aurais lancé l'exécution d'une méthode du fragment avec FragmentSecondaire.metodeainvoquer();

    J'imagine que c'est impossible ?

  10. #10
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Si c'est possible mais pas pratique .

    - dans le layout de mon activité, j'ai des boutons et un fragment auquel j'ai donné un id et défini la classe du fragment par class="com.vahia.monappli.FragmentDeBase"
    - au clic sur un bouton j'exécute une méthode de mon activité qui récupère le fragment par son id puis id.setClass="com.vahia.monappli.FragmentSecondaire"
    Ne te bases pas sur le nom des class pour récupérer tes fragments, plus par leur id ou tag que tu auras mis dans le fichier resources xml du layout de ton activité.

    ensuite je tue le fragment existant avec FragmentDeBase.finish();
    Là j'ai du mal à te suivre tu veux le supprimer de la vue c'est cela, car si c'est le cas c'est plus un removeFragment sur ton FragmentManager à faire depuis ton Activité.. le problème est vue que tu es partie sur du statique alors le mieux serait de le rendre sa vue invisible (View.GONE plutot depuis le Fragment). Sinon il faut partir sur du dynamique , niveau gestion fragment.
    A moins que cela ne soit que des Fragments type Workers ( mais pareil le dynamique s'impose plus dans ce cas là).

    puis j'aurais lancé l'exécution d'une méthode du fragment avec FragmentSecondaire.metodeainvoquer();
    Le problème avec cela c'est que cela te fait une méthode de plus par fragment depuis ton activité pour savoir quel nom de fonction tu dois appeler depuis ton activité, en passant par une class abstraite et un nom générique ce problème là s'en va.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  11. #11
    Membre du Club
    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
    Points : 54
    Points
    54
    Par défaut
    Je t'avoue que j'ai un peu de mal à suivre. Sûrement à cause du fait que je planche sur le sujet depuis plus de 5h...

    Chaque bouton de mon activité doit appeler un fragment particulier (pour obtenir l'affichage qui convient) et doit modifier le texte de plusieurs textviews. A chaque bouton un texte différent. C'est pour ça que j'ai créé à chaque fois une méthode par groupe de textviews à changer. Pour ne pas avoir à passer beaucoup de texte en paramètres.

    Je voulais détruire le fragment actuel à l'appel d'un nouveau bouton, juste pour ne pas empiler les fragments. Mais si à l'appel de la touche back ça me ferme l'activité et non les fragments ouverts un à une alors ça me va.


    Ensuite, je me suis penché sur le code de nicroman mais je n'ai pas tout pigé.
    Dans l'activité, à quoi correspond "type" à la ligne 6 ? Qu'est-ce que je dois mettre à la place de "// affichage du fragment choisi" ?

    J'imagine que tu dois me trouver lourd. Je dois poser des questions que tu dois trouver un peu bêtes...
    En tout cas, je te remercie pour ta patience !

  12. #12
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    Ensuite, je me suis penché sur le code de nicroman mais je n'ai pas tout pigé.
    Dans l'activité, à quoi correspond "type" à la ligne 6 ? Qu'est-ce que je dois mettre à la place de "// affichage du fragment choisi" ?
    En gros il a créer un enum FragmentType pour définir une valeur par Fragment, comme cela depuis la méthode selectFragment au lieu de donner comme paramètre le tag ou l'id tu donneras la valeurs du FragmentType que tu souhaites affiché et la méthode selectFragment s'occupera de traduire cette valeur via l'Enum, c'est juste un pattern tu aurais pu passer directement le tag au lieu de d'un enum.

    juste pour ne pas empiler les fragments
    Si les fragments sont déclaré depuis le fichier xml du layout de ton activité alors ils sont en mémoire de base. faire un finish sur un fragment statique visible va faire bizarre car quand tu vas tourner l'écran il va se ré-affiché normalement :/. (a testé mais je pense car il n'aura plus l'instance du fragment sauvegardé)

    Essayes d'y aller par étapes déjà mets en place la solution de Nicroman et regarde comment dans un premier temps sélectionner les fragments, après essayes d'en cacher pusi montrer un, puis comment appeler une méthode d'un fragment spécifique.

    Et tu me déranges nullement
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  13. #13
    Membre du Club
    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
    Points : 54
    Points
    54
    Par défaut
    Donc j'utilise ce code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    interface IFragmentSelector
    {
          public static enum FragmentType {
                   FragmentDeBase,
                   FragmentSecondaire,
                   FragmentTertiaire,
          };
     
          // la fonction à implémenter.
          public void selectFragment(FragmentType type);
    }
    L'enum saura que "FragmentDeBase," mène vers le fragment appelé "FragmentDeBase" ?
    Je laisse "type" dans la fonction selectFragment ?

    Et dans l'activité je fais ça : ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void selectFragment(FragmentType FragmentSecondaire) {
     
                  FragmentSecondaire.metodequivabien();
           }
    Après, comme tu dis, pour l'empilement des fragments on verra après.
    Juste pour info, j'ai bloqué l'activité en orientation paysage.

  14. #14
    Expert éminent

    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
    Points : 9 149
    Points
    9 149
    Par défaut
    C'est çà juste ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public void selectFragment(FragmentType FragmentSecondaire) {
                  switch(FragmentSecondaire) {
                  case FragmentDeBase:
                       Fragment1 fragment = (Fragment1)getFragmentManager().findFragmentById(id1);
                      fragment.metodequivabien();
                  break; 
                  case FragmentSecondaire:
                       Fragment2 fragment =  (Fragment2)getFragmentManager().findFragmentById(id2);
                       fragment.metodequivabien();
                  break;
                  case FragmentTertiaire:
                        Fragment3 fragment = (Fragment3 )getFragmentManager().findFragmentById(id3);
                        fragment.metodequivabien();
                  break;
                 }
     
           }
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  15. #15
    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
    Points : 1 493
    Points
    1 493
    Par défaut
    Si tu n'arrives toujours pas à te retrouver après toutes ces explications claires et concises les unes que les autres, je t'envoie à la révision des notions de base sur l'utilisation des fragments. De fois il faut reculer un peu pour mieux sauter. Peut être que quelque chose t'avait échappé (c'est ce que moi je fais au fait).

    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.

  16. #16
    Membre du Club
    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
    Points : 54
    Points
    54
    Par défaut
    @Feanorin : Merci Feanorin pour ton aide et ta patience. Je vais étudier ton code et voir comment l'insérer sans commettre d'erreur dans mon activité.

    @MasterMbg : Tu sais, je suis débutant en programmation java et java pour Android. Je me suis lancé dans cette aventure en partant de zéro. Je me suis focalisé sur la théorie mais au bout d'un moment s'est devenu vraiment rébarbatif. Du coup j'ai choisi de joindre la pratique à la théorie et là ma vitesse d'apprentissage a été multipliée au moins par 5. Mais du coup, je découvre et apprends au fur et à mesure. Nicroman m'a conseillé l'utilisation des fragments, notion qui m'était inconnue. Donc là je piétine mais j'apprend... Heureusement, cela est possible grace à des personnes comme Nicroman et Feanorin, merci à eux !

  17. #17
    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
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par Vahia Voir le message
    @Feanorin : Merci Feanorin pour ton aide et ta patience. Je vais étudier ton code et voir comment l'insérer sans commettre d'erreur dans mon activité.

    @MasterMbg : Tu sais, je suis débutant en programmation java et java pour Android. Je me suis lancé dans cette aventure en partant de zéro. Je me suis focalisé sur la théorie mais au bout d'un moment s'est devenu vraiment rébarbatif. Du coup j'ai choisi de joindre la pratique à la théorie et là ma vitesse d'apprentissage a été multipliée au moins par 5. Mais du coup, je découvre et apprends au fur et à mesure. Nicroman m'a conseillé l'utilisation des fragments, notion qui m'était inconnue. Donc là je piétine mais j'apprend... Heureusement, cela est possible grace à des personnes comme Nicroman et Feanorin, merci à eux !
    Je suis désolé si tu l'as pris mal. Mais c'était juste un conseil et rien d'autre qui pourrait te vexer. Sorry

    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.

  18. #18
    Membre du Club
    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
    Points : 54
    Points
    54
    Par défaut
    Ne t'inquiète pas, je ne me suis pas vexé.
    J'essayais juste d'expliquer pourquoi j'avais de la difficulté à comprendre certaines choses qui sont sûrement une pure évidence pour vous.

    Je vous tiendrais au courant de ma progression concernant ce problème de fragment.

  19. #19
    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
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par Vahia Voir le message
    Je vous tiendrais au courant de ma progression concernant ce problème de fragment.
    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.

  20. #20
    Membre du Club
    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
    Points : 54
    Points
    54
    Par défaut
    Bon, ça y est, désormais les boutons de mon activité changent les fragments. Une bonne chose de faite. Cependant je suis confronté à un nouveau problème : je n'arrive pas à modifier les textViews de mes fragments.
    Pour rappel, j'ai 5 fragments. Le premier (Frag0) contient 2 textViews, je l'invoque au démarrage. Les 4 autres (Frag1, Frag2, etc...) contiennent respectivement 10, 20, 30 et 40 textViews.
    Ce que je cherche à faire c'est qu'au clic sur un bouton, le fragment change (ça, c'est bon) et que ses textViews soient remplis avec le texte adéquate.

    Pour ce faire, dans Frag3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    View mainView = inflater.inflate(R.layout.layoutfrag3, container, false);
     
    public void bouton1(){
                    titre = (TextView) mainView.findViewById(R.id.titre);
    		titre.setText("Le titre");
                    desc = (TextView) mainView.findViewById(R.id.desc);
    		desc.setText("La description");
                    ...
    }
    Ensuite, dans mon activité, dans le onClickListener du bouton1 j'ai mis :
    Et là j'ai un message d'erreur d'eclipse : "Cannot make a static reference to the non-static method bouton1() from the type Frag3".

    Si je passe bouton1 en public static void bouton1 le message d'erreur disparait. Mais dans Frag3 j'ai une erreur qui disparaît seulement si je déclare mes textViews en static.
    Si je laisse comme ça, l'appli plante et me renvoie un NullPointerException dans Frag3 à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    titre = (TextView) mainView.findViewById(R.id.titre);
    J'ai cherché une solution sur le net mais je n'ai rien trouvé.
    Qu'en pensez-vous ?

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