Jaka jest różnica między Fragment a FragmentActivity?


Odpowiedzi:


280

A Fragmentto sekcja Activity, która ma:

  • własny cykl życia
  • otrzymuje własne zdarzenia wejściowe
  • można dodawać lub usuwać podczas Activitydziałania.

FragmentZawsze musi być osadzony w Activity.

Fragmentsnie są częścią API przed HoneyComb (3.0). Jeśli chcesz używać Fragmentsw aplikacji przeznaczonej dla wersji platformy wcześniejszej niż HoneyComb, musisz dodać pakiet pomocy technicznej do swojego projektu i użyć FragmentActivitydo przechowywania Fragments. FragmentActivityKlasa ma do czynienia z API Fragments, natomiast w Activityklasie, przed plastra miodu, nie.

Jeśli Twój projekt jest przeznaczony tylko dla HoneyComb lub nowszego, powinieneś używać, Activitya nie FragmentActivitytrzymać Fragments.

Trochę szczegółów:

Używaj android.app.Fragmentz Activity. Używaj android.support.v4.app.Fragmentz FragmentActivity. Nie dodawaj pakietu wsparcia Fragmentdo pliku, Activityponieważ spowoduje to zgłoszenie wyjątku.

Należy uważać: FragmentManageri LoaderManagermieć oddzielne wersje wsparcia dla FragmentActivity:

Jeśli używasz Fragmentw Activity(HoneyComb i wyżej), zadzwoń

  • getFragmentManager() dostać android.app.FragmentManager
  • getLoaderManager() dostać android.app.LoaderManager

jeśli używasz a Fragmentin a FragmentActivity(pre-HoneyComb), zadzwoń:

  • getSupportFragmentManager()dostać android.support.v4.app.FragmentManager.
  • getSupportLoaderManager() dostać android.support.v4.app.LoaderManager

więc nie rób

//don't do this
myFragmentActivity.getLoaderManager(); 
//instead do this:
myFragmentActivity.getSupportLoaderManager();

lub

//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()

Warto również wiedzieć, że chociaż fragment musi być osadzony w Activityarkuszu, nie musi być częścią Activityukładu. Może być używany jako niewidzialny pracownik dla działania, bez własnego interfejsu użytkownika.


6
Jednak fragment nie musi być częścią planu działania; możesz również użyć fragmentu bez własnego interfejsu użytkownika jako niewidzialnego pracownika dla działania.
uzay95

1
@ uzay95 dzięki za wskazanie tego. Dodałem sekcję na końcu, aby o tym wspomnieć.
Gunnar Karlsson,

@GunnarKarlsson Czy dodać fragment do fragmentActivity?
Dhasneem,

2
@Dhasneem Dodajesz fragment do FragmentActivity, jeśli chcesz, aby Twoja aplikacja działała w wersjach Androida niższych niż 3,0. W przeciwnym razie dodasz fragment do działania.
Gunnar Karlsson

2
Dzięki! To rozwiązuje mój problem! Teraz wiem, dlaczego moja aplikacja (napisana za pomocą Activity) zawsze zawiesza się w onCreate po dodaniu przycisku logowania do Facebooka (w swoim przykładzie używają android.support.v4.app.Fragment). Oczywiście są też inne przyczyny awarii. Ale twoja odpowiedź jest ostatnim elementem, który składa je razem.
Chlind

14

FragmentActivity to nasza klasyczna aktywność z obsługą fragmentów, nic więcej. Dlatego FragmentActivity jest potrzebna, gdy fragment zostanie dołączony do działania.

Well Fragment to dobry komponent, który kopiuje podstawowe zachowania Aktywności, ale nie jest samodzielnym komponentem aplikacji, takim jak Aktywność i musi być dołączony do Działania, aby działał.

Spójrz tutaj po więcej szczegółów


1
BTW, nieaktualna odpowiedź, która dotyczy tylko aplikacji, które chcą działać na urządzeniach starszych niż API 11.
ToolmakerSteve

@ToolmakerSteve Czy możesz podać więcej szczegółów? Jeśli to możliwe, czy możesz edytować odpowiedź, używając aktualnej wersji?
Gökhan Barış Aker

8

Pomyśl o FragmentActivity jako zwykłej klasie Activity, która może obsługiwać fragmenty. Przed wykonaniem plastra miodu klasa aktywności nie mogła bezpośrednio obsługiwać fragmentów, więc jest to potrzebne w działaniach wykorzystujących fragmenty.

Jeśli docelową dystrybucją jest Honeycomb i więcej, możesz zamiast tego przedłużyć Aktywność.

Za „działanie podrzędne” należy również uważać fragment. Nie może istnieć bez aktywności. Zawsze myśl o fragmencie jako o działaniu pobocznym i powinieneś być dobry. Tak więc aktywność byłaby rodzicielem, a fragment (-y) dziecka - rodzaj symbolicznej relacji.


1

FragmentActivity to działanie ad hoc, które zawiera fragment. W tych kilku słowach wyjaśniam jedną z głównych ważnych zmian, które w systemie Android 3.0 (HoneyComb) zespół Androida wprowadził do zestawu SDK systemu Android.

Dzięki tej nowej koncepcji Twoje fragmenty kodu i układ stają się bardziej elastyczne i łatwiejsze w utrzymaniu. Jeśli szukasz w Google, jest wiele przykładów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.