27 votes

Appel des méthodes d'activité à partir de Fragment

J'utilise un fragment seulement à l'intérieur d'un parent spécifique de l'activité. Maintenant, je me demande si il y a des inconvénients si je appeler des méthodes dans l'activité parent directement à partir du fragment comme ceci:

getActivity().someMethodInParentActivitiy()

Un solution serait de définir un officiel de l'écouteur de l'interface dans le fragment de retour d'appel à l'activité parent et ensuite faire l'activité à implémenter cette interface.

Existe-il des raisons (par exemple, la fiabilité ou de la vitesse) pourquoi je devrais utiliser le deuxième plus complexe de la solution au lieu de la méthode directe, les appels à partir du fragment à l'activité?

22voto

Ewoks Points 3910

Un casting supplémentaire doit être fait:

 Activity activity123 = getActivity();

if(activity123 instanceof ParentActivity) {
    ((ParentActivity) activity123).someMethodInParentActivity();
}
 

cependant, comme @pawelzieba l'a écrit si vous voulez utiliser ce fragment dans d'autres activités, ce qui est probablement le cas, cela ne fonctionnera pas de cette façon.

18voto

pawelzieba Points 10393

Ne regardez pas la performance au début. N'oubliez pas que «l'optimisation prématurée est la racine de tout mal». La deuxième approche est meilleure car votre fragment peut être utilisé dans différentes activités. La première approche introduit plus de dépendances dans votre code, le fragment dépend du type d'activité. Vous perdez la capacité de tester, de réutiliser, de petits complexes. Cela peut sembler plus simple en ce moment, mais à l'avenir, vous verrez ;-)

9voto

MrLithid Points 181

Lorsque j'ai besoin de faire quelque chose comme ça, j'utilise simplement un BroadcastReceiver pour pouvoir l'appeler de n'importe où.

 BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action != null) {
            if (action.equals("WHATEVER_ACTION")) {
                // Do stuff
            }
        }
    }
};
 

Ensuite, dans mon fragment, je vais simplement utiliser:

activity.sendBroadcast (new Intent (). setAction ("WHATEVER_ACTION"));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X