Prawdopodobnie powinieneś spróbować oddzielić fragment od aktywności na wypadek, gdybyś chciał użyć go gdzie indziej. Możesz to zrobić, tworząc interfejs, który implementuje Twoje działanie.
Zdefiniowałbyś więc interfejs w następujący sposób:
Załóżmy na przykład, że chcesz nadać działaniu ciąg i zwrócić mu liczbę całkowitą:
public interface MyStringListener{
public Integer computeSomething(String myString);
}
Można to zdefiniować we fragmencie lub oddzielnym pliku.
Wtedy twoje działanie zaimplementuje interfejs.
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;
}
}
Następnie w swoim fragmencie miałbyś zmienną MyStringListener i ustawiłeś detektor we fragmencie na metodzie AtAttach (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. */
}
}
}
edycja (17.12.2015):onAttach(Activity activity) is deprecated, use onAttach(Context context) instead, it works as intended
Pierwsza odpowiedź zdecydowanie działa, ale łączy twój aktualny fragment z działalnością gospodarza. Dobrą praktyką jest utrzymywanie fragmentu niezwiązanego z działalnością gospodarza na wypadek, gdybyś chciał użyć go przy innej aktywności.