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 :

Appeler une méthode non static dans un fragment depuis l'activité parente.


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Points : 30
    Points
    30
    Par défaut Appeler une méthode non static dans un fragment depuis l'activité parente.
    Bonjour à tous,

    J'ai donc une activité qui manage 4 fragments par l’intermédiaire d'un ViewPagerAdapter. Depuis cette activité je voudrais appeler la méthode du fragment visible et en cours:

    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
    18
    19
    20
    21
    public void openButtons(){
    //mPosition est la position du  pager
     
        if (mPosition==0){
            Fragment1 fragment = (Fragment1) getSupportFragmentManager().findFragmentById(R.id.fragment1);
            fragment.openButtons();
     
     
        }
        if (mPosition==1){
            Fragment2 fragment = (Fragment2) getSupportFragmentManager().findFragmentById(R.id.fragment2);
            fragment.openButtons();
        }
        if (mPosition==2){
            ....
        }
        if (mPosition==3){
            ...
        }
     
    }
    Si la méthode dans mon fragment est définie comme non static :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void openButtons(){//some stuff}
    j'obtiens un nullPointer à la ligne fragment.openButtons(). Et ceci quelque soit le fragment.

    Si la méthode dans mon fragment est définie comme static :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static void openButtons(){//some stuff}
    ça passe...

    A noter que le contenu de la méthode n'est pas en cause , puisque le problème est le même avec une méthode vide.

    Ma question est donc: pourquoi est on obligé de définir le méthode comme static car dans ces conditions :
    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
    18
    19
    public void openButtons(){
     
     
        if (mPosition==0){
            Fragment1.openButtons()
     
     
        }
        if (mPosition==1){
             Fragment2.openButtons()
        }
        if (mPosition==2){
            ....
        }
        if (mPosition==3){
            ...
        }
     
    }
    est tout autant fonctionnel!

    Merci de m'éclaircir...

  2. #2
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Salut,

    Dans ton code cette ligne doit te renvoyer null
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fragment1 fragment = (Fragment1) getSupportFragmentManager().findFragmentById(R.id.fragment1);
    Ce qui explique un nullPointerException quand tu tentes d'exécuter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fragment.openButtons();
    Regarde le code findFragmentById(int id) et essaye de voir pourquoi il te retourne null.

    ps : En passant la méthode en static tu n'as plus de nullPointerExeption parceque tu ne passes pas par une instance de classe. Mais ça n'empêchera pas que findFragmentById(i) renverra toujours null ^^
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Merci Ivelios,

    effectivement l'instance du fragment était null!

    De toute façon dans le cas d'un ViewPager, la meilleur approche pour retrouver l'instance est :

    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
    18
    19
    20
    public void openButtons(){
    //mPosition is a position of pager
    ViewPagerAdapter adapter = ((ViewPagerAdapter)mViewPager.getAdapter());
    if (mPosition==0){
         Fragment fragment = adapter.getItem(0);
            ((Fragment1)fragment).openButtons();
     
     
    }
    if (mPosition==1){
        Fragment fragment = adapter.getItem(1);
            ((Fragment2)fragment).openButtons();
    }
    if (mPosition==2){
        ....
    }
    if (mPosition==3){
        ...
    }
    }

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/07/2013, 20h49
  2. Réponses: 10
    Dernier message: 04/06/2012, 11h29
  3. Utiliser une méthode non-static dans une méthode static
    Par mcfly37 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 18/08/2010, 11h41
  4. [Thread] appel de méthodes non-synchronized dans une méthode synchronized
    Par dr23fr dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 24/06/2008, 22h47
  5. appeler une méthode avec paramètre dans une page JSP
    Par javasmif dans le forum Struts 2
    Réponses: 1
    Dernier message: 06/12/2007, 10h48

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