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.
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();
}
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é
MyFragmentCallback
dans la définition de classe.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.
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();
}