Heim  >  Artikel  >  Java  >  Android-Grundlagen: Verwenden von Fragment zur Steuerung des Wechsels zwischen mehreren Seiten

Android-Grundlagen: Verwenden von Fragment zur Steuerung des Wechsels zwischen mehreren Seiten

高洛峰
高洛峰Original
2017-02-07 16:10:371235Durchsuche

Heute werde ich die Steuerung von Fragment erläutern, hauptsächlich Vorgänge wie das Wechseln der Ansicht und das Ersetzen von Seiten. Außerdem erfahren Sie, wie Sie das Verwaltungsobjekt von Fragment erhalten und mit der Aktivität kommunizieren.

1. Fragmente verwalten
Um Fragmente in einer Aktivität zu verwalten, müssen Sie FragmentManager verwenden. Rufen Sie dessen Instanz ab, indem Sie getFragmentManager() der Aktivität aufrufen.

• Sie können einige Dinge tun über FragmentManager, einschließlich: Verwenden Sie findFragmentById() (wird zum Bereitstellen eines UI-Fragments im Aktivitätslayout verwendet) oder findFragmentByTag() (anwendbar für Fragmente mit oder ohne UI), um das in der Aktivität vorhandene Fragment abzurufen.
•Entfernen Sie das Fragment mit popBackStack() vom hinteren Stapel (simulieren Sie, dass der Benutzer den Befehl BACK drückt).
•Verwenden Sie addOnBackStackChangeListener(), um einen Listener für Backstack-Änderungen zu registrieren.

2. Verarbeiten von Fragmenttransaktionen
Ein sehr starkes Merkmal der Verwendung von Fragmenten in Aktivitäten ist: Hinzufügen, Entfernen, Ersetzen und Ausführen anderer Aktionen an Fragmenten basierend auf Benutzerinteraktion. Jeder an eine Aktivität übermittelte Änderungssatz wird als Transaktion bezeichnet und kann mithilfe der API in FragmentTransaction verarbeitet werden. Wir können jede Transaktion auch in einem aktivitätsverwalteten Backstack speichern, sodass der Benutzer durch Änderungen im Fragment zurücknavigieren kann (ähnlich wie beim Zurücknavigieren durch die Aktivität).

Rufen Sie eine FragmentTransaction-Instanz von FragmentManager ab:

FragmentManager fragmentManager =getFragmentManager();
FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction();

Jede Transaktion besteht aus einer Reihe von Änderungen, die gleichzeitig ausgeführt werden müssen. Sie können alle Änderungen festlegen, die Sie innerhalb einer bestimmten Transaktion durchführen möchten, indem Sie Methoden wie add(), remove() und replace() verwenden. Um die Transaktion dann auf die Aktivität anzuwenden, muss commit() aufgerufen werden.

Bevor Sie commit() aufrufen, möchten Sie möglicherweise addToBackStack() aufrufen, um die Transaktion zum Backstack einer Fragmenttransaktion hinzuzufügen. Dieser Backstack wird von der Aktivität verwaltet und ermöglicht es dem Benutzer, durch Drücken der ZURÜCK-Taste zum vorherigen Fragmentstatus zurückzukehren.

//创建修改实例
Fragment newFragment = newExampleFragment();
FragmentTransaction transaction =getFragmentManager().beginTransaction();
// Replace whatever is in thefragment_container view with this fragment,
// and add the transaction to the backstack
transaction.replace(R.id.fragment_container,newFragment);
transaction.addToBackStack(null);
//提交修改
transaction.commit();

Oben erfahren Sie, wie Sie ein Fragment durch ein anderes ersetzen und den vorherigen Zustand im hinteren Stapel behalten. In diesem Beispiel ersetzt newFragment das durch R.id.fragment_container identifizierte Fragment im aktuellen Layout-Container. Durch den Aufruf von addToBackStack() wird die Ersetzungstransaktion im Backstack gespeichert, sodass der Benutzer die Transaktion zurücksetzen und das vorherige Fragment wiederherstellen kann, indem er auf die Schaltfläche ZURÜCK drückt.


Wenn Sie einer Transaktion mehrere Änderungen hinzufügen (z. B. add() oder remove()) und addToBackStack() aufrufen, werden alle Änderungen angewendet, bevor Sie commit() aufrufen. Die Änderungen werden als einzelne Transaktion zum Backstack hinzugefügt und durch Drücken der ZURÜCK-Taste werden sie zusammen zurückgesetzt. Die Reihenfolge, in der Änderungen zur FragmentTransaction hinzugefügt werden, ist mit den folgenden Ausnahmen nicht wichtig:

• Commit() muss zuletzt aufgerufen werden
• Wenn mehrere Fragmente demselben Container hinzugefügt werden, gilt die Reihenfolge in welche hinzugefügt werden, bestimmt ihre Platzierung in der Ansichtshierarchie. Die in

gezeigte Reihenfolge. Wenn beim Ausführen einer Transaktion, die ein Fragment entfernt, addToBackStack() nicht aufgerufen wird, wird dieses Fragment zerstört, wenn die Transaktion festgeschrieben wird, und Der Benutzer kann nicht dorthin zurücknavigieren. Aus diesem Grund wird beim Entfernen eines Fragments beim Aufruf von addToBackStack() das Fragment gestoppt, und wenn der Benutzer zurück navigiert, wird es fortgesetzt. Darüber hinaus können Sie für jede Fragmenttransaktion eine Transaktionsanimation anwenden, indem Sie setTransition() aufrufen, bevor Sie die Transaktion festschreiben.

Der Aufruf von commit() führt die Transaktion nicht sofort aus. Im Gegenteil, es plant die Transaktion und führt sie, sobald sie fertig ist, im UI-Thread der Aktivität (dem Haupt-Thread) aus. Bei Bedarf können Sie jedochexecutePendingTransactions() von Ihrem UI-Thread aus aufrufen, um die von commit() übermittelte Transaktion sofort auszuführen. Dies ist jedoch normalerweise nicht erforderlich, es sei denn, die Transaktion ist ein Slave einer Aufgabe in einem anderen Thread.
Warnung: Sie können commit() nur verwenden, um eine Transaktion festzuschreiben, bevor die Aktivität ihren Status speichert (wenn der Benutzer die Aktivität verlässt).

3. Mit der Aktivität kommunizieren
Obwohl Fragment als implementiert ist ein unabhängiges Aktivitätsobjekt und kann in mehreren Aktivitäten verwendet werden, aber eine bestimmte Fragmentinstanz ist direkt an die Aktivität gebunden, die sie enthält. Spezielle Fragmente können mit getActivity() auf die Aktivitätsinstanz zugreifen und problemlos Aufgaben ausführen, z. B. das Suchen einer Ansicht im Aktivitätslayout. Wie im folgenden Code:

View listView =getActivity().findViewById(R.id.list);

Ähnlich kann die Aktivität Methoden im Fragment aufrufen, indem sie mithilfe von findFragmentById() oder findFragmentByTag() einen Verweis auf das Fragment vom FragmentManager erhält.

ExampleFragment fragment =(ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);

4. Zusammenfassung
Abschließend möchte ich noch über Fragment-Beispiele sprechen. Die API-Demo unter unserem SDK enthält Fragment-Beispiele Wenn Sie die Demo sehen möchten, schauen Sie sich einfach das API-Demoprogramm an, ohne sich umschauen zu müssen. Verschiedene Funktionen werden getrennt und verschiedene Klassen implementiert. Sie können den spezifischen Code bei Bedarf anzeigen.

Weitere Android-Grundlagen und verwandte Artikel zur Verwendung der Fragmentsteuerung zum Wechseln mehrerer Seiten finden Sie auf der chinesischen PHP-Website!
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn