Ich komme von iOS, wo es einfach ist und Sie einfach einen UIViewController verwenden. In Android scheinen die Dinge jedoch viel komplizierter zu sein, mit bestimmten UIComponents für bestimmte API-Ebenen. Ich lese BigNerdRanch für Android (das Buch ist ungefähr 2 Jahre alt) und sie schlagen vor, dass ich Activity
meine als Host verwende FragmentActivities
. Ich dachte jedoch, dass Activity
es veraltet ist.
Was genau sollte ich für API Level 22 (mit einer Mindestunterstützung für API Level 15 oder 16) sowohl zum Hosten der Komponenten als auch für die Komponenten selbst verwenden? Gibt es Verwendungszwecke für all diese oder sollte ich fast ausschließlich einen oder zwei verwenden?
android
android-fragments
android-activity
android-actionbaractivity
appcompatactivity
Jameson
quelle
quelle
FragmentActivity
Hosts hosten . Sie hosten nurFragment
s. Bei neueren Android-Versionen wurde dieActivity
Klasse selbst aktualisiert, um sie direkt zu hosten. Zur Unterstützung älterer VersionenFragmentActivity
wurde eingeführt.Activity
Unterstützung für eineActionBar
. Dies wurde bei älteren Versionen durchActionBarActivity
first unterstützt, die jetzt veraltet und durch ersetzt wurdenAppCompatActivity
. Da beide Klassen erweitert werdenFragmentActivity
, unterstützen sie auch HostingFragment
.Antworten:
Nein.
Activity
ist die Basislinie. Jede Aktivität erbtActivity
direkt oder indirekt von.FragmentActivity
dient zur Verwendung mit dem Backport von Fragmenten, die in den Bibliothekensupport-v4
und gefundensupport-v13
wurden. Die native Implementierung von Fragmenten wurde in API Level 11 hinzugefügt, was niedriger ist als Ihre vorgeschlagenenminSdkVersion
Werte. Der einzige Grund, warum Sie diesFragmentActivity
speziell berücksichtigen müssten, ist, wenn Sie verschachtelte Fragmente verwenden möchten (ein Fragment, das ein anderes Fragment enthält), da dies in nativen Fragmenten bis API Level 17 nicht unterstützt wurde.AppCompatActivity
ist aus derappcompat-v7
Bibliothek. Grundsätzlich bietet dies einen Backport der Aktionsleiste. Da die native Aktionsleiste in API Level 11 hinzugefügt wurde, benötigen Sie dies nichtAppCompatActivity
. Aktuelle Versionen vonappcompat-v7
bieten jedoch auch einen begrenzten Backport der Material Design-Ästhetik in Bezug auf die Aktionsleiste und verschiedene Widgets. Die Verwendungappcompat-v7
hat Vor- und Nachteile , die weit über den Rahmen dieser speziellen Antwort zum Stapelüberlauf hinausgehen.ActionBarActivity
ist der alte Name der Basisaktivität vonappcompat-v7
. Aus verschiedenen Gründen wollten sie den Namen ändern. Es sei denn , einige Drittanbieter - Bibliothek , die Sie verwenden , auf ein beharrtActionBarActivity
, sollten Sie es vorziehen ,AppCompatActivity
überActionBarActivity
.Also, wenn Sie
minSdkVersion
im Bereich von 15-16 liegen:Wenn Sie das Backported Material Design-Aussehen wünschen, verwenden Sie
AppCompatActivity
Wenn nicht, aber verschachtelte Fragmente möchten, verwenden Sie
FragmentActivity
Wenn nicht, verwenden Sie
Activity
Nur aus Kommentar als Hinweis hinzufügen:
AppCompatActivity
ErweitertFragmentActivity
, damit jeder, der Funktionen vonFragmentActivity
verwenden muss, verwenden kannAppCompatActivity
.quelle
FragmentActivity
ist ein Vorfahr vonAppCompatActivity
. Ich empfehle zwar nicht, verschachtelte Fragmente zu verwenden, aber in dem Maße, in dem verschachtelte Fragmente überhaupt funktionieren,AppCompatActivity
werden verschachtelte Fragmente unterstützt.Activity
die neuesten Informationen ohnesupport-v7
nicht zurückportiertes Materialdesign zu erhalten ? Mein Ziel ist min 19 Ziel 25Theme.Material
, benötigen SieminSdkVersion
21 oder höher.Activity
ist die Basisklasse aller anderen Aktivitäten, ich glaube nicht, dass sie veraltet sein wird. Die Beziehung zwischen ihnen ist:Activity
<-FragmentActivity
<-AppCompatActivity
<-ActionBarActivity
'<-' bedeutet hier Vererbung. Die Referenz gesagt
ActionBarActivity
ist veraltet, verwendenAppCompatActivity
statt.Grundsätzlich ist die Verwendung
AppCompatActivity
immer die richtige Wahl. Die Unterschiede zwischen ihnen sind:Activity
ist die grundlegende.Activity
,FragmentActivity
bietet die Möglichkeit , zu verwendenFragment
.FragmentActivity
,AppCompatActivity
bietet FunktionenActionBar
.quelle
2019: Verwendung
AppCompatActivity
Zum Zeitpunkt dieses Schreibens (überprüfen Sie den Link, um zu bestätigen, dass er immer noch wahr ist) empfiehlt die Android-Dokumentation die Verwendung,
AppCompatActivity
wenn Sie eine App-Leiste verwenden.Dies ist die rationale Gegebenheit:
Die allgemeinen Anweisungen zum Hinzufügen einer Symbolleiste sind
AppCompatActivity
NoActionBar
.ToolBar
dem XML-Layout jeder Aktivität ein hinzu.ToolBar
in jeder AktivitätonCreate
.Weitere Informationen finden Sie in der Dokumentation . Sie sind ziemlich klar und hilfreich.
quelle
Für eine API-Mindeststufe von 15 möchten Sie verwenden
AppCompatActivity
. SoMainActivity
würde Ihr beispielsweise aussehen:Um das zu verwenden
AppCompatActivity
, stellen Sie sicher, dass Sie die Google Support Library heruntergeladen haben (Sie können dies in Ihrem Tools -> Android -> SDK-Manager überprüfen). Fügen Sie dann einfach die Gradle-Abhängigkeit in die gradle.build-Datei Ihrer App ein:Sie können dies
AppCompat
als HauptfunktionActivity
verwenden, um dann Fragmente oder andere Aktivitäten zu starten (dies hängt davon ab, welche Art von App Sie erstellen).Das BigNerdRanch-Buch ist eine gute Ressource, aber ja, es ist veraltet. Lesen Sie es, um allgemeine Informationen zur Funktionsweise von Android zu erhalten. Erwarten Sie jedoch nicht, dass die von ihnen verwendeten Klassen auf dem neuesten Stand sind.
quelle
Activity
Klasse ist die Grundklasse. (Das Original) Es unterstützt die Fragmentverwaltung (seit API 11). Wird seine reine Verwendung nicht mehr empfohlen, da seine Spezialisierungen weitaus besser sind.ActionBarActivity
war in einem Moment der Ersatz für die Aktivitätsklasse, weil es einfach war, die ActionBar in einer App zu handhaben.AppCompatActivity
ist der neue Weg, da die ActionBar nicht mehr empfohlen wird und Sie stattdessen die Symbolleiste verwenden sollten (dies ist derzeit der ActionBar-Ersatz). AppCompatActivity erbt von FragmentActivity. Wenn Sie also Fragmente verarbeiten müssen, können Sie dies (über den Fragment-Manager). AppCompatActivity ist für JEDE API, nicht nur für 16+ (wer hat das gesagt?). Sie können es verwenden, indem Sie escompile 'com.android.support:appcompat-v7:24:2.0'
in Ihre Gradle-Datei einfügen. Ich benutze es in API 10 und es funktioniert perfekt.quelle
Toolbar
.Hier herrscht große Verwirrung, insbesondere wenn Sie veraltete Quellen lesen.
Die grundlegende ist
Activity
, die Fragmente zeigen kann. Sie können diese Kombination verwenden, wenn Sie eine Android-Version> 4 verwenden.Allerdings gibt es auch eine Support - Bibliothek , die die anderen Klassen umfassen Sie erwähnt:
FragmentActivity
,ActionBarActivity
undAppCompat
. Ursprünglich wurden sie verwendet, um Fragmente in Android-Versionen <4 zu unterstützen, aber tatsächlich werden sie auch verwendet, um Funktionen aus neueren Android-Versionen (z. B. Materialdesign) zurück zu portieren.Der letzte ist
AppCompat
, die anderen 2 sind älter. Die Strategie, die ich verwende, besteht darin, immer zu verwendenAppCompat
, damit die App für Backports von zukünftigen Versionen von Android bereit ist.quelle
Wenn Sie darüber reden
Activity
,AppcompactActivity
,ActionBarActivity
etc etc ..Wir müssen über Basisklassen sprechen, die sie erweitern. Zuerst müssen wir die Hierarchie der Superklassen verstehen.
Alle Dinge werden aus dem Kontext gestartet, der für alle diese Klassen eine Superklasse ist.
Context
wird gefolgt von oder erweitert vonContextWrapper
Jetzt erreichen wir
Activity
Die unten aufgeführten Klassen können nur erweitert werden, werden jedoch von ihrem Nachkommen intern erweitert und bieten Unterstützung für bestimmte APIs
jetzt FragmentActivty
Wenn Sie diese Klasse im Gegensatz zur integrierten Fragment- und Loader-Unterstützung der neuen Plattform verwenden, müssen Sie die Methoden
getSupportFragmentManager()
undgetSupportLoaderManager()
verwenden, um auf diese Funktionen zuzugreifen.Im Jahr 2015 ist ActionBarActivity in Version 22.1.0 der Support Library veraltet. Stattdessen sollte AppCompatActivity verwendet werden.
Sie können Ihrer Aktivität eine Aktionsleiste hinzufügen , wenn Sie auf API-Ebene 7 oder höher ausgeführt werden, indem Sie diese Klasse für Ihre Aktivität erweitern und das Aktivitätsthema auf
Theme.AppCompat
oder ein ähnliches Thema festlegenIch beziehe mich auf diese beiden, eins , zwei
quelle
Da sich der Name wahrscheinlich in zukünftigen Versionen von Android ändern wird (derzeit ist
AppCompatActivity
es der neueste, aber er wird sich wahrscheinlich irgendwann ändern), glaube ich, dass es gut ist, eine Klasse zu habenActivity
, die sich erweitert,AppCompatActivity
und dann erstrecken sich alle Ihre Aktivitäten von dieser. Wenn sie morgen den NamenAppCompatActivity2
ändern, müssen Sie ihn beispielsweise nur an einer Stelle ändern.quelle
AppCompatActivity erweitert FragmentActivity erweitert BaseFragmentActivityApi16 erweitert BaseFragmentActivityApi14 erweitert SupportActivity erweitert Activity
So Aktivität ist schneller als alle & AppCompatActivity ist die beste von allen.
quelle