Video: Deine erste Android App in 5 Minuten - App Programmieren 2025
Die Benutzeroberfläche des hier verwendeten Android-App-Beispiels hat drei Panels - eine Liste von Elementen, ein Detailpanel, das das in der Liste ausgewählte Element beschreibt. und ein Detail-in-mehr-Tiefe-Panel. Auf einem kleinen Smartphone-Bildschirm kann jede Anzeige eine separate Aktivität sein. Ein Tablettbildschirm im Querformat bietet jedoch Platz für mehr als ein Panel.
Das folgende Bild zeigt diese App mit zwei der drei Panels. Das Fenster auf der linken Seite zeigt eine Liste der Android SDK-Komponenten an. Das Feld auf der rechten Seite zeigt eine Beschreibung der gewünschten Komponente in der Liste auf der linken Seite an. (Die Beschreibung ist tatsächlich die ersten paar Sätze der SDK-Dokumentation der Komponente.) Dieses Detail-auf-der-rechts-Muster ist Teil vieler Benutzeroberflächen.
Um die Anzeige zu erstellen, erstellen Sie eine Aktivität. Die Aktivität hat zwei Fragmente - ein Fragment auf der linken Seite und ein weiteres auf der rechten Seite. Das linke Fenster zeigt das gleiche Fragment während des gesamten Laufs der App an, sodass Sie dieses Fragment in der Layoutdatei der Aktivität deklarieren können. Das rechte Fenster zeigt jeweils ein Fragment an, das Fragment ändert sich jedoch während des Laufs der App. Sie deklarieren also ein Frame-Layout im rechten Bereich.
Im obigen Code teilt der android: layout_ welche Attribute den Bildschirm in zwei Hälften teilen - eine Hälfte für das Fragmentelement und die andere Hälfte für das FrameLayout-Element. Die Strategie mit diesen Attributen besteht darin, für jedes Element zunächst mindestens Null Pixel zuzuweisen. Natürlich bedeutet Null Pixel überhaupt keine Breite (was dasselbe ist wie unsichtbar zu sein). Damit die beiden Hälften des Layouts nicht unsichtbar bleiben, weisen Sie den beiden Hälften ungleich null Werte für layout_weight zu. Bei Nicht-Null-Gewichtswerten wird jede Hälfte erweitert, um den verfügbaren Platz im Layout auszufüllen.
Die Verwendung des vollständig qualifizierten Klassennamens des Fragments (com. Allmycode. Frag. ComponentNamesFragment) ist beabsichtigt. Ein abgekürzter Name (wie z. B. ComponentNamesFragment) schneidet den Senf nicht ab.
Falls Sie sich wundern, bietet Android mit den integrierten detailsElementBackground ein einheitliches Aussehen für Dinge wie die rechte Hälfte (Dinge, die Details zu einem Element anzeigen, das der Benutzer ausgewählt hat).
Der Hauptaktivitätscode der App ist beeindruckend uninteressant.
Paket com. allmycode. Frag; Import Android. App. Aktivität; Import Android. os. Bündeln; Öffentliche Klasse AllPurposeActivity erweitert Aktivität {@Override protected void onCreate (Bundle savedInstanceState) {super. onCreate (gespeicherterInstanzStatus); setContentView (R.Layout. main);}}
Der folgende Code enthält die ComponentNamesFragment-Klasse. Aufgrund des Layouts im ersten Beispiel pflanzt Android ein ComponentNamesFragment auf der linken Seite des Bildschirms des Geräts.
Paket com. allmycode. Frag; Import Android. App. FragmentManager; Import Android. App. FragmentTransaktion; Import Android. App. ListFragment; Import Android. os. Bündeln; Import Android. Aussicht. Aussicht; Import Android. Widget. ArrayAdapter; Import Android. Widget. Listenansicht; Öffentliche Klasse ComponentNamesFragment erweitert ListFragment {final static String [] COMPONENTS = {"Activity", "Service", "BroadcastReceiver", "ContentProvider"}; @Override public void onActivityCreated (Bündel savedInstanceState) {super. onActivityCreated (savedInstanceState); setListAdapter (neuer ArrayAdapter (getActivity (), android.Ray-Layout. simple_list_item_1, COMPONENTS));} @Override public void onListItemClick (ListView l, Ansicht v, int index, long id) {// Fragment mit Index erstellen DocsFragment docsFragment = neue DocsFragment (); Bündel args = Helfer. getBundleWithIndex (Index); docsFragment. setArguments (Argumente); // Lösche den Backstack FragmentManager fragmentManager = getFragmentManager (); int backStackEntryCount = FragmentManager. getBackStackEntryCount (); für (int i = 0; iDie Klasse im obigen Code erweitert die ListFragment-Klasse von Android. Ein ListFragment ist ein Fragment, das eine Liste anzeigt. Zu Beginn des Lebenszyklus des Fragments setzt der Code im obigen Beispiel einen Listenadapter (genauer gesagt einen ArrayAdapter) für das Fragment. Wie früh ist also "früh"?
Der erste Parameter des ArrayAdapter-Konstruktors ist ein Kontext. Aber warte! Im Gegensatz zu einer Aktivität ist ein Fragment kein Kontext. Daher können Sie das Schlüsselwort this nicht für den ersten Parameter des ArrayAdapter-Konstruktors verwenden.
Glücklicherweise hat ein Fragment eine getActivity-Methode. Ein Aufruf von getActivity erfasst die Aktivität, an die das Fragment angehängt ist. Für den ersten Parameter des ArrayAdapter-Konstruktors können Sie getActivity aufrufen. Natürlich können Sie getActivity erst aufrufen, wenn das Fragment an eine vorhandene Aktivität angehängt ist. Aus diesem Grund wird die onActivityCreated-Methode des Fragments oben überschrieben. Android ruft onActivityCreated auf, nachdem das Fragment angefügt und die onCreate-Methode der Aktivität aufgerufen wurde. Also alles funktioniert wie geplant.
Der Android. App. Die Urgroßelternklasse der Aktivitätsklasse ist Android. Inhalt. Kontext. Aber der Androide. App. Die Elternklasse der Fragmentklasse ist ein einfaches altes Java. lang. Objekt. Daher bezieht sich das Schlüsselwort in einem Aktivitätscode auf einen Kontext. Im Code eines Fragments bezieht sich das Schlüsselwort jedoch nicht auf einen Kontext.
Im obigen Beispiel hat der Konstruktor für den ArrayAdapter drei Parameter.
Der erste Parameter ist der Kontext - dieser unangenehme Parameter, der Sie dazu zwingt, den Konstruktor in die onActivityCreated-Methode einzufügen.
Der zweite Parameter ist simple_list_item_1 - ein Standard-Android-Layout.
Das Layout simple_list_item_ 1 erzeugt das Aussehen, das Sie auf der linken Seite des Bildes sehen. Android hat viele dieser Standard-Layouts. Eine Zusammenfassung der verfügbaren Layouts finden Sie auf der Entwickler-Website von Android.
Der dritte Parameter ist die Sammlung von Elementen, die in der Liste angezeigt werden.
In diesem Beispiel stammen diese Elemente aus dem Array COMPONENTS, das im selben Beispiel deklariert ist.
Wie ein ListActivity verfügt ein ListFragment über eine onListItemClick-Methode. Sie können auf einen Klick antworten, indem Sie mit einem DocsFragment, einem FragmentTransaction und einem FragmentManager arbeiten:
Das DocsFragment repräsentiert die rechte Seite des obigen Bildes.
Eine Fragmenttransaktion ist ein Bündel von Dingen, die Sie mit Fragmenten machen. Zum Beispiel ist das Einrichten, um ein Fragment durch ein anderes zu ersetzen, eine Transaktion.
Ein Fragment-Manager macht, was sein Name vermuten lässt. Es verwaltet die Ankunft und Abreise der Fragmente.
