Moje pytanie dotyczy, poza oczywistymi różnicami dziedziczenia, jakie są główne różnice między Fragment
i FragmentActivity
? Do jakich scenariuszy najlepiej pasują poszczególne zajęcia? Próbuję zrozumieć, dlaczego istnieją obie te klasy ...
Moje pytanie dotyczy, poza oczywistymi różnicami dziedziczenia, jakie są główne różnice między Fragment
i FragmentActivity
? Do jakich scenariuszy najlepiej pasują poszczególne zajęcia? Próbuję zrozumieć, dlaczego istnieją obie te klasy ...
Odpowiedzi:
A Fragment
to sekcja Activity
, która ma:
Activity
działania.Fragment
Zawsze musi być osadzony w Activity
.
Fragments
nie są częścią API przed HoneyComb (3.0). Jeśli chcesz używać Fragments
w aplikacji przeznaczonej dla wersji platformy wcześniejszej niż HoneyComb, musisz dodać pakiet pomocy technicznej do swojego projektu i użyć FragmentActivity
do przechowywania Fragments
. FragmentActivity
Klasa ma do czynienia z API Fragments
, natomiast w Activity
klasie, przed plastra miodu, nie.
Jeśli Twój projekt jest przeznaczony tylko dla HoneyComb lub nowszego, powinieneś używać, Activity
a nie FragmentActivity
trzymać Fragments
.
Trochę szczegółów:
Używaj android.app.Fragment
z Activity
. Używaj android.support.v4.app.Fragment
z FragmentActivity
. Nie dodawaj pakietu wsparcia Fragment
do pliku, Activity
ponieważ spowoduje to zgłoszenie wyjątku.
Należy uważać: FragmentManager
i LoaderManager
mieć oddzielne wersje wsparcia dla FragmentActivity:
Jeśli używasz Fragment
w Activity
(HoneyComb i wyżej), zadzwoń
getFragmentManager()
dostać android.app.FragmentManager
getLoaderManager()
dostać android.app.LoaderManager
jeśli używasz a Fragment
in 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 Activity
arkuszu, nie musi być częścią Activity
układu. Może być używany jako niewidzialny pracownik dla działania, bez własnego interfejsu użytkownika.
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
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.
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.