Różnica między android.app.Fragment i android.support.v4.app.Fragment

175

Jaka jest różnica między android.app.Fragmenti android.support.v4.app.Fragmentoraz w jakich okolicznościach należy ich używać?

promień
źródło

Odpowiedzi:

288

android.support.v4.app.Fragmentto klasa Fragment w bibliotece obsługi systemu Android, która jest pakietem kompatybilności, który umożliwia korzystanie z niektórych nowszych funkcji Androida na starszych wersjach Androida.

android.app.Fragmentto klasa Fragment w natywnej wersji zestawu Android SDK. Został wprowadzony w systemie Android 3 (API 11).

Jeśli chcesz, aby Twoja aplikacja korzystała z fragmentów i chcesz kierować reklamy na urządzenia starsze niż API 11, musisz użyć android.support.v4.app.Fragment. Jeśli jednak kierujesz reklamy tylko na urządzenia z interfejsem API 11 lub nowszym, możesz użyć android.app.Fragment.

Edycja: zawarty w systemie system operacyjny android.app.Fragment jest teraz przestarzały (od poziomu 28 interfejsu API) i wszyscy powinni przejść do korzystania z implementacji bibliotek obsługi.

Raghav Sood
źródło
4
Zobacz także „Korzystanie z biblioteki FragmentStatePagerAdapter BEZ obsługi biblioteki”: stackoverflow.com/questions/18512294/ ...
CJBS
Jeśli zastąpisz onAttach (), zapoznaj się z tym wątkiem, aby w pewnych okolicznościach nie był wywoływany przez android.app.Fragment: stackoverflow.com/questions/32083053/ ...
Hong
3
będzie używać Androidx: androidx.fragment.app.Fragment
Abhijit Kurane
56

Od 2018 roku:

Z android.app.Fragment dokumentacji :

Ta klasa została wycofana na poziomie interfejsu API 28.
Użyj biblioteki pomocy technicznej, Fragmentaby zapewnić spójne zachowanie na wszystkich urządzeniach i uzyskać dostęp do cyklu życia.

Dlatego fragmenty wsparcia ( android.support.v4.app.Fragment) powinny być teraz używane wszędzie zamiast natywnych fragmentów ( android.app.Fragment).

Artem
źródło
@Artyom, jako noob w programowaniu na Androida, spodziewałem się, że kiedy android.app.Fragmentklasa zostanie wycofana, ten poziom API 28 będzie miał alternatywne, prawdopodobnie radykalne podejście zastępcze. Czy istnieje podejście naprzód, czy też jest ono kompatybilne wstecz, android.support.v4.app.Fragmentwłaściwe podejście?
ergohack
1
@ergohack Zobacz to w ten sposób: w przypadku kodu java możesz uwzględnić kod bajtowy w środowisku wykonawczym urządzenia lub w pliku jar aplikacji. Kod biblioteki wsparcia zostanie umieszczony w Twoim pliku jar i zapewni tę samą funkcję, co kod dostarczony przez środowisko wykonawcze, więc nie ma powodu, aby nie używać nowoczesnej i utrzymywanej biblioteki wsparcia zamiast starzejącego się i nieobsługiwanego kodu telefonu docelowego.
Pierre
12

Używam android.support.v4.app.Fragmentwyłącznie.

Wszystkie aplikacje, które piszę, muszą obsługiwać od razu Androida 2.3 i jest to najłatwiejszy sposób na zrobienie tego.

Jeśli wspierasz 11+, trzymaj się android.app.Fragment.

Alex
źródło
18
W takim przypadku tracisz wiele funkcji, które istnieją w bibliotece wsparcia, ale tylko w natywnej po pewnym poziomie API. Na przykład getChildFragmentManager () nie jest dostępna do poziomu 17. Radzę używać tylko fragmentów wsparcia i udawać, że natywny nie istnieje.
Johan,
4

Jeśli Twoja aplikacja jest przeznaczona dla interfejsu API 11 lub nowszego, możesz użyć, android.app.Fragmenta plik APK będzie mniejszy.

W przeciwnym razie dodaj android.support.v4.app.Fragmentbibliotekę do projektu, aby obsługiwać starsze wersje Android API (Android 3.x).

Ahmad Payan
źródło
2

android.support.v4.app.Fragment to biblioteka, której możesz użyć, aby uzyskać zgodność wsteczną ze starszymi wersjami API.

Fragmenty zostały dodane na poziomie API 11 (wraz z innymi funkcjami), należy dołączyć tę bibliotekę, aby rozszerzyć te funkcje na urządzenia starsze niż API 11. Jest to przydatna biblioteka i proponuję przyjrzeć się ActionBarSherlock, który rozszerza pasek akcji na urządzenia starsze niż API v11.

MonkeyDroid
źródło
-2

Jeśli Twoja aplikacja jest przeznaczona na poziom API 11 lub wyższy, możesz użyć android.app.Fragment i zmniejszy to rozmiar pliku APK. W przeciwnym razie użyj android.support.v4.app.Fragment

vinod wickramasekara
źródło