Aktivität, AppCompatActivity, FragmentActivity und ActionBarActivity: Wann welche verwenden?
Ich komme von iOS, wo es einfach ist und Sie einfach mit einem UIViewController. Aber bei Android scheinen die Dinge sehr viel komplizierter, mit bestimmten UIComponents für bestimmte API-Levels. Ich lese BigNerdRanch für Android (das Buch ist etwa 2 Jahre alt) und Sie schlagen vor, ich benutze Activity
host für meine FragmentActivities
. Ich dachte jedoch, dass Activity
war veraltet.
Also für API Level 22 (mit einem minimum-support für API Level 15 oder 16), was genau sollte ich verwenden, sowohl zum hosten der Komponenten und für die Bauteile selbst? Gibt es Anwendungen für alle diese, oder soll ich mich mit einem oder zwei fast ausschließlich?
InformationsquelleAutor der Frage Jameson | 2015-07-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht.
Activity
ist die baseline. Jede Aktivität erbt vonActivity
direkt oder indirekt.FragmentActivity
ist für die Verwendung mit dem backport der Fragmente fand in dersupport-v4
undsupport-v13
Bibliotheken. Die native Implementierung der Fragmente wurde in API-Level 11, die niedriger ist als die von Ihnen vorgeschlageneminSdkVersion
Werte. Der einzige Grund, warum Sie benötigen, zu prüfenFragmentActivity
speziell, wenn Sie verwenden möchten verschachtelten Fragmente (fragment-holding ein weiteres fragment), so war das nicht unterstützt native Fragmente bis API Level 17.AppCompatActivity
ist von derappcompat-v7
Bibliothek. Grundsätzlich bietet sich eine Rückportierung der action-bar. Da die native action bar Hinzugefügt wurde in API-Level 11 brauchen Sie nichtAppCompatActivity
. Die aktuellen Versionen vonappcompat-v7
auch hinzufügen, eine begrenzte backport der Material Design-ästhetik, im Hinblick auf die action-bar und verschiedene widgets. Es gibt vor-und Nachteile der Verwendung vonappcompat-v7
die weit über den Umfang dieses spezifischen Stack Overflow-Antwort.ActionBarActivity
ist der alte name des Basis-Aktivität vonappcompat-v7
. Aus verschiedenen Gründen, Sie wollten den Namen ändern. Es sei denn, einige Drittanbieter-Bibliothek, die Sie verwenden, besteht auf eineActionBarActivity
sollten Sie lieberAppCompatActivity
überActionBarActivity
.So, angesichts Ihrer
minSdkVersion
im Bereich 15-16:Wenn Sie wollen, dass die mehr Material Design-look, verwenden Sie
AppCompatActivity
Wenn nicht, aber Sie wollen verschachtelten Fragmente, verwenden Sie
FragmentActivity
Wenn nicht, verwenden Sie
Activity
Nur das hinzufügen von Kommentar als Hinweis: AppCompatActivity extends FragmentActivity, also wer braucht Funktionen FragmentActivity können AppCompatActivity.
InformationsquelleAutor der Antwort CommonsWare
Activity
ist die Basisklasse aller anderen Aktivitäten, ich glaube nicht, dass es veraltet. Die Beziehung zwischen Ihnen ist:Activity
<-FragmentActivity
<-AppCompatActivity
<-ActionBarActivity
'< " - " bedeutet, dass Vererbung hier. Die Referenz sagte
ActionBarActivity
ist veraltet, verwenden SieAppCompatActivity
statt.Also im Grunde, mit
AppCompatActivity
ist immer die richtige Wahl. Die Unterschiede zwischen Ihnen:Activity
ist die Grundversion.Activity
FragmentActivity
bietet die Möglichkeit zur Verwendung vonFragment
.FragmentActivity
AppCompatActivity
bietet Funktionen, umActionBar
.InformationsquelleAutor der Antwort Ted Yu
2018: Verwenden Sie
AppCompatActivity
Zum Zeitpunkt des Schreibens dieses Artikels (überprüfen Sie den link, um zu bestätigen, es ist immer noch wahr), die Android-Dokumentation empfiehlt die Verwendung
AppCompatActivity
wenn Sie eine App-Leiste.Dies ist die rationale gegeben:
Den Allgemeinen Anweisungen für das hinzufügen einer Symbolleiste sind
AppCompatActivity
NoActionBar
.ToolBar
auf jede Aktivität, die xml-layout.ToolBar
in jeder AktivitätonCreate
.Sehen die Dokumentation Richtungen für mehr details. Sie sind sehr klar und hilfreich.
InformationsquelleAutor der Antwort Suragch
Für ein minimum API level 15, die Sie benutzen wollen würde
AppCompatActivity
. So zum Beispiel, IhreMainActivity
würde wie folgt Aussehen:Verwenden
AppCompatActivity
stellen Sie sicher, dass der Google-Support-Bibliothek heruntergeladen haben (Sie können dies überprüfen, in Ihrem Tools -> Android -> SDK manager). Dann einfach die gradle Abhängigkeit in Ihrem app gradle.build-Datei:Können Sie diese
AppCompat
als Ihre Haupt -Activity
die dann verwendet werden können, um zu starten, Fragmente oder andere Aktivitäten (dies hängt davon ab, welche Art von app Sie erstellen).Den BigNerdRanch Buch ist eine gute Ressource, aber ja, es ist veraltet. Lesen Sie die Allgemeinen Informationen, wie Android funktioniert, aber nicht erwarten, dass die spezifischen Klassen, die Sie verwenden, um auf dem Laufenden zu sein.
InformationsquelleAutor der Antwort adao7000
Activity
- Klasse ist die Basisklasse. (Das original) Es unterstützt Fragment management (Seit API 11). Ist nicht empfehlenswert, mehr von seiner reinen verwenden, da seine Spezialisierungen sind weit besser.ActionBarActivity
war in einem moment die Ersatz, um die Aktivität der Klasse weil es einfach zu handhaben ist die ActionBar auch in einer app.AppCompatActivity
ist die neuen Weg zu gehen, weil die ActionBar nicht mehr gefördert, und sollten Sie die Symbolleiste statt (das ist derzeit die ActionBar-Ersatz). AppCompatActivity erbt von FragmentActivity also, wenn Sie brauchen, um zu behandeln-Fragmenten können Sie (über das Fragment-Manager). AppCompatActivity ist für JEDE API, nicht nur 16+ (wer hat das gesagt?). Sie können es verwenden, durch hinzufügencompile 'com.android.support:appcompat-v7:24:2.0'
in Ihrem Gradle-Datei. Ich benutze es in der API 10 und es funktioniert perfekt.InformationsquelleAutor der Antwort Joaquin Iurchuk
Gibt es eine Menge Verwirrung hier, vor allem, wenn Sie Lesen, veraltete Quellen.
Die Grundform ist
Activity
die zeigen Fragmente. Sie können verwenden Sie diese Kombination, wenn Sie auf die Android-version > 4.Allerdings gibt es auch eine support-Bibliothek, die auch die anderen Klassen, die Sie erwähnt:
FragmentActivity
ActionBarActivity
undAppCompat
. Ursprünglich wurden Sie verwendet, um support-Fragmente auf Android-Versionen < 4, aber eigentlich sind Sie auch zu portieren Funktionen von neueren Android-Versionen (material, design zum Beispiel).Die neueste ist
AppCompat
die anderen 2 sind älter. Die Strategie, die ich benutze ist, immerAppCompat
so dass die app wird bereit sein, im Fall von backports von zukünftigen Versionen von Android.InformationsquelleAutor der Antwort flower_green
Da der name wird sich wahrscheinlich ändern in zukünftigen Versionen von Android (momentan die neuste ist
AppCompatActivity
aber es wird sich wohl ändern, irgendwann), ich glaube, eine gute Sache zu haben ist eine KlasseActivity
erweitertAppCompatActivity
und dann alle Ihre Tätigkeiten erstrecken sich von diesem. Wenn morgen, ändern Sie den Namen zuAppCompatActivity2
zum Beispiel werden Sie haben, um es zu ändern nur an einer Stelle.InformationsquelleAutor der Antwort ExpensiveBelly
Wenn Sie sprechen über
Activity
AppcompactActivity
ActionBarActivity
etc etc..Wir müssen reden, Basis-Klassen, die Sie bauen, wir müssen Zuerst verstehen, die Hierarchie von super-Klassen.
Alle, die die Dinge begannen, aus dem Kontext, die super-Klasse für alle Klassen.
Context
folgt oder verlängertContextWrapper
Nun Gelangen wir zur
Activity
Unter Klassen eingeschränkt sind, zu erweitern, aber Sie werden erweitert durch Ihre Unterlänge intern und bieten Unterstützung für bestimmte Api -
nun FragmentActivty
Bei Verwendung dieser Klasse als Gegensatz zu der neuen Plattform gebaut-in fragment-und loader-Unterstützung, müssen Sie die
getSupportFragmentManager()
undgetSupportLoaderManager()
Methoden bzw. zum Zugriff auf diese Funktionen.2015 ActionBarActivity ist veraltet in revision 22.1.0 von der Bibliothek Unterstützt. AppCompatActivity sollte stattdessen verwendet werden.
Können Sie eine ActionBarum Ihre Aktivitäten beim laufen auf API level 7 oder höher durch die Erweiterung dieser Klasse für Ihre Aktivität und Einstellung der Aktivität Thema zu
Theme.AppCompat
oder ein ähnliches ThemaBeziehe ich diese beiden ein,zwei
InformationsquelleAutor der Antwort farhana
AppCompatActivity erstreckt FragmentActivity erstreckt BaseFragmentActivityApi16 erstreckt BaseFragmentActivityApi14 erstreckt SupportActivity erstreckt Aktivität
So Aktivität ist schneller als alle & AppCompatActivity ist die beste von allen.
InformationsquelleAutor der Antwort Ahamadullah Saikat