Pochodzę z iOS, gdzie jest to łatwe, a ty po prostu używasz UIViewController. Jednak w Androidzie rzeczy wydają się znacznie bardziej skomplikowane, z pewnymi komponentami UIC dla określonych poziomów API. Czytam BigNerdRanch dla Androida (książka jest mniej więcej 2 lat) i sugerują używam Activity
do host mojej FragmentActivities
. Myślałem jednak, że Activity
jest przestarzały.
Zatem w przypadku API poziomu 22 (z minimalną obsługą API poziomu 15 lub 16), czego dokładnie powinienem używać zarówno do hostowania komponentów, jak i samych komponentów? Czy są zastosowania dla tych wszystkich, czy powinienem używać jednego lub dwóch prawie wyłącznie?
android
android-fragments
android-activity
android-actionbaractivity
appcompatactivity
Jameson
źródło
źródło
FragmentActivity
ies. Jesteś tylko gospodarzemFragment
. W nowszych wersjach AndroidaActivity
sama klasa została zaktualizowana, aby hostować je bezpośrednio. Do obsługi starszych wersjiFragmentActivity
wprowadzono.Activity
ies miały wsparcie dlaActionBar
. To było obsługiwane w starszych wersjach doActionBarActivity
pierwszej, która teraz jest przestarzała i zastąpiona przezAppCompatActivity
. Ponieważ obie te klasy rozszerzają sięFragmentActivity
, obsługują również hostingFragment
.Odpowiedzi:
Nie.
Activity
jest punktem odniesienia. Każde działanie dziedziczyActivity
bezpośrednio lub pośrednio.FragmentActivity
jest przeznaczony do stosowania z backportem fragmentów znalezionych w bibliotekachsupport-v4
isupport-v13
. Natywna implementacja fragmentów została dodana na poziomie API 11, który jest niższy niż proponowaneminSdkVersion
wartości. Jedynym powodem, dla którego należy rozważyć,FragmentActivity
jest to, czy chcesz użyć zagnieżdżonych fragmentów (fragment zawierający inny fragment), ponieważ nie było to obsługiwane w fragmentach natywnych do poziomu API 17.AppCompatActivity
jest zappcompat-v7
biblioteki. Zasadniczo oferuje to backport paska akcji. Ponieważ natywny pasek akcji został dodany na poziomie API 11, nie jest to konieczneAppCompatActivity
. Jednak obecne wersjeappcompat-v7
dodają również ograniczone zaplecze estetyczne Material Design pod względem paska akcji i różnych widżetów. Istnieją zalety i wady korzystaniaappcompat-v7
, znacznie wykraczające poza zakres tej konkretnej odpowiedzi na przepełnienie stosu.ActionBarActivity
to stara nazwa podstawowej czynności zappcompat-v7
. Z różnych powodów chcieli zmienić nazwę. Chyba że niektóre biblioteki innej firmy używasz nalegaActionBarActivity
powinien woliszAppCompatActivity
nadActionBarActivity
.Biorąc pod uwagę twoje
minSdkVersion
w zakresie 15-16:Jeśli chcesz uzyskać wygląd projektowanego materiału, użyj
AppCompatActivity
Jeśli nie, ale chcesz zagnieżdżonych fragmentów, użyj
FragmentActivity
Jeśli nie, użyj
Activity
Wystarczy dodać z komentarza jako notatkę:
AppCompatActivity
rozszerzaFragmentActivity
, aby każdy, kto musi korzystać z funkcji,FragmentActivity
może korzystaćAppCompatActivity
.źródło
FragmentActivity
jest przodkiemAppCompatActivity
. Chociaż nie zalecam używania zagnieżdżonych fragmentów, o ile w ogóle zagnieżdżone fragmenty będą działać,AppCompatActivity
będą obsługiwać zagnieżdżone fragmenty.Activity
większości najnowszych bezsupport-v7
np. Niesportowanego projektowania materiałów. Moim celem jest min. 19 cel 25Theme.Material
, potrzebujeszminSdkVersion
21 lub więcej.Activity
jest podstawową klasą wszystkich innych działań, nie sądzę, że będzie przestarzała. Relacja między nimi jest:Activity
<-FragmentActivity
<-AppCompatActivity
<-ActionBarActivity
„<-” oznacza tutaj dziedzictwo. Odniesienie powiedział
ActionBarActivity
jest przestarzała, użyjAppCompatActivity
zamiast tego.Zasadniczo używanie
AppCompatActivity
zawsze jest właściwym wyborem. Różnice między nimi to:Activity
jest podstawowy.Activity
,FragmentActivity
zapewnia możliwość korzystaniaFragment
.FragmentActivity
,AppCompatActivity
zapewnia funkcje dlaActionBar
.źródło
2019: Użyj
AppCompatActivity
W momencie pisania tego tekstu (sprawdź link, aby potwierdzić, że nadal jest to prawda), Dokumentacja Androida zaleca używanie,
AppCompatActivity
jeśli korzystasz z paska aplikacji.To jest racjonalne dane:
Ogólne wskazówki dotyczące dodawania paska narzędzi to
AppCompatActivity
NoActionBar
.ToolBar
układ xml każdej czynności.ToolBar
w każdej aktywnościonCreate
.Aby uzyskać więcej informacji, zobacz instrukcje dotyczące dokumentacji . Są dość jasne i pomocne.
źródło
Dla minimalnego poziomu interfejsu API 15, chcesz użyć
AppCompatActivity
. Na przykładMainActivity
wyglądałoby to tak:Aby z niego skorzystać
AppCompatActivity
, upewnij się, że masz pobraną bibliotekę pomocy Google (możesz to sprawdzić w Narzędziach -> Android -> Menedżer SDK). Następnie po prostu uwzględnij zależność stopni w pliku gradle.build aplikacji:Możesz użyć tego
AppCompat
jako głównegoActivity
, którego można następnie użyć do uruchomienia Fragmentów lub innych działań (zależy to od rodzaju tworzonej aplikacji).Książka BigNerdRanch jest dobrym źródłem, ale tak, jest przestarzała. Przeczytaj to, aby uzyskać ogólne informacje o tym, jak działa Android, ale nie oczekuj, że określone klasy będą aktualne.
źródło
Activity
klasa jest klasą podstawową. (Oryginał) Obsługuje zarządzanie fragmentami (od API 11). Nie jest już zalecane jego czyste użycie, ponieważ jego specjalizacje są znacznie lepsze.ActionBarActivity
był w chwili zamiennik do klasy Aktywny ponieważ łatwa do obsługi ActionBar w aplikacji.AppCompatActivity
jest nowa droga, ponieważ ActionBar nie zachęca już i należy użyć zamiast Toolbar (to obecnie wymiana ActionBar). AppCompatActivity dziedziczy po FragmentActivity, więc jeśli chcesz obsłużyć Fragmenty, możesz (za pomocą Menedżera fragmentów). AppCompatActivity jest dla KAŻDEGO API, nie tylko 16+ (kto to powiedział?). Możesz go użyć, dodając plik Gradle. Używam go w API 10 i działa idealnie.compile 'com.android.support:appcompat-v7:24:2.0'
źródło
Toolbar
.Jest tu wiele zamieszania, szczególnie jeśli czytasz nieaktualne źródła.
Podstawowym jest
Activity
, który może pokazywać Fragmenty. Możesz użyć tej kombinacji, jeśli masz wersję Androida> 4.Jednak istnieje również biblioteka wsparcie, które obejmuje innych klas pan wspomniał:
FragmentActivity
,ActionBarActivity
iAppCompat
. Początkowo były one używane do obsługi fragmentów w wersjach Androida <4, ale w rzeczywistości są one również używane do backportowania funkcjonalności z nowszych wersji Androida (na przykład projektowanie materiałów).Najnowszym jest
AppCompat
, pozostałe 2 są starsze. Zawsze używam strategiiAppCompat
, aby aplikacja była gotowa w przypadku backportów z przyszłych wersji Androida.źródło
Jeśli mówić o
Activity
,AppcompactActivity
,ActionBarActivity
etc etc ..Musimy porozmawiać o klasach podstawowych, które rozszerzają. Najpierw musimy zrozumieć hierarchię superklas.
Wszystkie rzeczy zaczynają się od kontekstu, który jest super klasą dla wszystkich tych klas.
Context
następuje lub jest przedłużany przezContextWrapper
Teraz sięgamy do
Activity
Poniższe klasy są ograniczone do rozszerzenia, ale są one rozszerzane przez ich zstępującego wewnętrznie i zapewniają wsparcie dla konkretnego interfejsu API
teraz FragmentActivty
Korzystając z tej klasy w przeciwieństwie do wbudowanej obsługi fragmentów i modułów ładujących nowej platformy, należy użyć odpowiednio metod
getSupportFragmentManager()
igetSupportLoaderManager()
, aby uzyskać dostęp do tych funkcji.W 2015 ActionBarActivity jest przestarzałe w wersji 22.1.0 Biblioteki pomocy technicznej. Zamiast tego należy użyć AppCompatActivity .
Możesz dodać pasek ActionBar do swojej aktywności, gdy działa on na poziomie API 7 lub wyższym, rozszerzając tę klasę dla swojej aktywności i ustawiając motyw aktywności na
Theme.AppCompat
lub podobny motywOdnoszę te dwa jeden , dwa
źródło
Ponieważ nazwa prawdopodobnie zmieni się w przyszłych wersjach Androida (obecnie najnowsza jest,
AppCompatActivity
ale prawdopodobnie zmieni się w pewnym momencie), uważam, że dobrą rzeczą jest posiadanie klasy,Activity
która rozszerza się,AppCompatActivity
a następnie wszystkie twoje działania zaczynają się od tej. Jeśli jutro zmienią nazwę,AppCompatActivity2
na przykład będziesz musiał ją zmienić tylko w jednym miejscu.źródło
AppCompatActivity rozszerza FragmentActivity rozszerza BaseFragmentActivityApi16 rozszerza BaseFragmentActivityApi14 rozszerza SupportActivity rozszerza aktywność
Aktywność jest więc szybsza niż wszystko, a AppCompatActivity jest najlepsza ze wszystkich.
źródło