Vous devriez probablement essayer de découpler le fragment de l'activité au cas où vous voudriez l'utiliser ailleurs. Vous pouvez le faire en créant une interface que votre activité implémente.
Vous devez donc définir une interface comme suit :
Supposons par exemple que vous vouliez donner à l'activité un String et qu'elle renvoie un Integer :
public interface MyStringListener{
public Integer computeSomething(String myString);
}
Cela peut être défini dans le fragment ou dans un fichier séparé.
Ensuite, votre activité doit mettre en œuvre l'interface.
public class MyActivity extends FragmentActivity implements MyStringListener{
@Override
public Integer computeSomething(String myString){
/** Do something with the string and return your Integer instead of 0 **/
return 0;
}
}
Ensuite, dans votre fragment, vous aurez une variable MyStringListener et vous définirez l'écouteur dans la méthode fragment onAttach(Activity activity).
public class MyFragment {
private MyStringListener listener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
listener = (MyStringListener) context;
} catch (ClassCastException castException) {
/** The activity does not implement the listener. */
}
}
}
edit(17.12.2015) : onAttach(Activity activity) is deprecated, use onAttach(Context context) instead, it works as intended
La première réponse fonctionne certainement, mais elle couple votre fragment actuel avec l'activité de l'hôte. C'est une bonne pratique de garder le fragment découplé de l'activité hôte au cas où vous voudriez l'utiliser dans une autre activité.