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...