web-dev-qa-db-fra.com

Appel de la méthode d'activité depuis l'intérieur d'un fragment

J'essaie d'appeler une méthode dans une activité à partir d'un écran Fragment.

J'ai une méthode appelée myMethod () qui se trouve dans une activité appelée MyActivity; J'ai un fragment appelé Screen1Fragment.

Je voudrais appeler MyActivity.myMethod () depuis l'intérieur de Screen1Fragment mais je ne sais pas comment faire.

Auparavant, Screen1Fragment était une activité et j'ai donc étendu MyActivity pour pouvoir appeler directement myMethod (). Mais j'ai dû changer l'activité en un fragment pour l'utilisation des onglets coulissants.

Merci d'avance.

15
Android Learner

Utilisez getActivity() dans votre fragment.

MyActivity activity = (MyActivity) getActivity();
activity.myMethod();

si vous n'êtes pas sûr si votre fragment est attaché à MyActivity,

 Activity activity = getActivity();
 if(activity instanceof MyActivity){
      MyActivity myactivity = (MyActivity) activity;
      myactivity.myMethod();
 }
39
Sipka

Vous devez rendre votre fragment totalement indépendant de l'activité à laquelle vous l'attachez. Le point de Fragments est que vous pouvez les réutiliser dans différents contextes avec différentes activités. Pour y parvenir et toujours en mesure d'appeler des méthodes de votre activité, le modèle suivant est recommandé dans la documentation officielle .

Dans votre fragment :

  • définir une interface publique avec la méthode

    public interface MyFragmentCallback{
        public void theMethod();
    }
    
  • définir un champ et obtenir une référence de cast:

    private MyFragmentCallback callback;
    public void onAttach(Activity activity){
        callback = (MyFragmentCallback) activity
        super.onAttach(activity);
    }
    

Dans votre activité

  • implémentez MyFragmentCallback dans la définition de classe.
  • implémentez theMethod() dans votre activité (Eclipse vous le demandera)

Ensuite, à partir de votre fragment, vous pouvez appeler callBack.theMethod()

La différence entre cela et simplement appeler votre méthode sur getActivity () est que votre fragment n'est plus associé à cette activité spécifique. Vous pouvez donc le réutiliser avec d'autres activités, par exemple une pour les téléphones et l'autre pour les tablettes.

24
znat

Si la méthode est la méthode statique de MainActivity, quelque chose comme:

    public static void someMethod(){}

Ensuite, c'est assez simple. Il suffit d'appeler

   MainActivity.someMethod()

Cependant, je suppose que ce que vous voulez vraiment, c'est accéder à certaines fonctions de la classe Activity. Ensuite, vous pouvez utiliser le code suivant dans le créateur de la vue Fragment

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState){

        container.getContext().someMethod();

   }
0
Anson Yao