Probabilmente dovresti provare a separare il frammento dall'attività nel caso in cui desideri usarlo da qualche altra parte. Puoi farlo creando un'interfaccia implementata dalla tua attività.
Quindi definiresti un'interfaccia come la seguente:
Supponiamo ad esempio di voler assegnare una stringa all'attività e di restituire un numero intero:
public interface MyStringListener{
public Integer computeSomething(String myString);
}
Questo può essere definito nel frammento o in un file separato.
Quindi la tua attività dovrebbe implementare l'interfaccia.
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;
}
}
Quindi nel tuo frammento avresti una variabile MyStringListener e imposteresti il listener nel frammento del metodo 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 (2015/12/17):onAttach(Activity activity) is deprecated, use onAttach(Context context) instead, it works as intended
La prima risposta funziona sicuramente ma abbina il tuo frammento attuale all'attività dell'host. È buona norma mantenere il frammento disaccoppiato dall'attività dell'host nel caso in cui si desideri utilizzarlo in un'altra attività.