Eine Geschichte darüber, wie in Android Informationen von einem Fragment (Fragment) zu einer Aktivität (Aktivität) übertragen werden. Die Informationen sind nützlich für Anfänger (Junioren), die das Programmieren für Android beherrschen, und es ist unwahrscheinlich, dass sie für Mittelstufe und Senioren interessant sind.
Starten Sie die IDE (integrierte Entwicklungsumgebung)
Android Studio . Erstellen Sie ein neues Projekt: Datei -> Neu -> Neues Projekt. Wählen Sie "Leere Aktivität" und klicken Sie auf "Weiter".

Füllen Sie die Felder "Name", "Paketname", "Speicherort speichern" aus.

Die IDE erstellt automatisch zwei Dateien: "MainActivity.java" im Verzeichnis "java / [Paketname]", "activity_main.xml" im Verzeichnis "res / layout".


Die Java-Datei bestimmt, was die Anwendung
tut , xml - wie sie
aussieht . Es macht bisher sehr wenig, nur "setContentView (R.layout.activity_main);". Diese Zeile weist die Anwendung an, beim Start das Layout activity_main.xml zu verwenden. Und da das Layout nur ein Widget vom Typ "TextView" mit dem Text "Hello World!" Enthält, sieht unsere Anwendung auch sehr bescheiden aus.

Erstellen Sie im Projektordner ein Fragment mit dem Namen "Fragment1".


Die IDE erstellt zwei Dateien: "Fragment1" und "fragment_fragment1.xml".


Öffnen Sie die Fragment-Layout-Datei und löschen Sie das nicht benötigte Widget "TextView" mit einer Begrüßungszeile.

Wechseln Sie in den Entwurfsmodus und ziehen Sie die Schaltfläche (Schaltfläche) auf das Layout.

Die IDE erstellt eine Schaltfläche mit der Kennung "button1".

Bearbeiten Sie nun das Layout der Hauptaktivität, d. H. Datei "activity_main.xml"

Bewegen Sie das Text-Widget nach oben und fügen Sie das von uns erstellte Fragment zum Layout hinzu (ziehen Sie dazu das Element "<>" auf das Layout, wählen Sie "Fragment1" und klicken Sie auf "OK").

Setzen Sie im Aktivitätslayout in den Fragmenteinstellungen layout_height = "wrap_content" und bearbeiten Sie die Platzierung nach Ihrem Geschmack. Ändern Sie außerdem die Kennung des Textfelds in "textReport" und das Fragment in "fragmentWithButton".

Führen Sie den Emulator aus (Umschalt + F10) und sehen Sie, was passiert ist.

Die Anwendung zeigt die Aufschrift "Hallo Welt!" und die Taste. Die Inschrift wird aus der
Aktivität abgeleitet, die Schaltfläche gehört zu einem
Fragment . Die Taste wird gedrückt, hat aber bisher keine Wirkung. Versuchen wir, die Beschriftung so zu programmieren, dass die Anzahl der Tastendrücke angezeigt wird. Dazu müssen wir
eine Nachricht über den Klick auf die Schaltfläche vom Fragment zur Aktivität senden .
Zuerst bringen wir dem Fragment bei, die Anzahl der Tastenklicks zu zählen. Öffnen Sie die Datei "Fragment1.java".

Fügen Sie die Variable "counter" hinzu. Erstellen Sie in der Methode "onCreateView", die unmittelbar nach dem Erstellen des Fragments aufgerufen wird, die Schaltfläche "Listener". Die IDE erfordert die Implementierung von View.OnClickListener - zustimmen (Alt + Eingabetaste). Lassen Sie uns die onClick-Methode erstellen (neu definieren), die den Wert der Variablen "counter" mit jedem Klick auf die Schaltfläche erhöht und eine Popup-Meldung anzeigt.

Lassen Sie uns im Emulator (wieder Umschalt + F10) überprüfen, wie es funktioniert. Durch Drücken der Taste wird die Popup-Meldung "Anzahl der Tastenklicks: ..." am unteren Rand des Anwendungsbildschirms angezeigt.

Großartig, mach weiter. Unser Hauptziel ist es, Informationen (in diesem Fall die Anzahl der Schaltflächenklicks) von der Fragmentinstanz zur Aktivitätsinstanz zu übertragen. Leider sind die Lebenszyklen von
Aktivitäten und
Fragmenten so organisiert, dass Android (fast) keine direkte Kommunikation zwischen Aktivität und Fragment zulässt. Daher benötigen wir eine Zwischenschnittstelle. Nennen wir ihn "Postbote". Die Schnittstelle kann entweder in einer separaten Datei oder in einer Datei mit einem Fragmentcode erstellt werden. Wir werden die erste Option wählen. Unsere Postman-Oberfläche enthält eine einzelne abstrakte (ohne "body") Methode von "fragmentMail".

Wir werden die Variable "numberOfClicks" als "Umschlag" verwenden, um Nachrichten vom Fragment zur Aktivität zu übertragen.
Öffnen Sie die Datei mit dem Aktivitätscode "MainActivity.java". Soweit wir uns erinnern, sieht es so aus:

Wir implementieren die Postman-Schnittstelle und fügen der Aktivität die fragmentMail-Schnittstellenmethode hinzu, wobei wir sie neu definieren (
Override ).

Sobald die Aktivität einen neuen Wert in der Variablen "numberOfClicks" "sieht", wird eine aktualisierte Nachricht im Textfeld textReport angezeigt.
Aber wir müssen immer noch "den Brief in den Umschlag legen", d. H. Übergeben Sie der Variablen die Anzahl der Klicks auf die Schaltfläche. Und das machen wir im Fragmentcode. Öffnen Sie die Datei "Fragment1.java".
D̶o̶b̶a̶v̶l̶ya̶e̶m̶ V Podpis klassa ̶i̶m̶p̶l̶e̶m̶e̶n̶t̶a̶ts̶i̶yu̶ ̶i̶n̶t̶e̶r̶f̶e̶y̶s̶a̶ ̶ «Postman». Ide ̶p̶o̶t̶r̶e̶b̶u̶e̶t̶ ̶p̶e̶r̶e̶o̶p̶r̶e̶d̶e̶l̶i̶t̶̶ metod ̶i̶n̶t̶e̶r̶f̶e̶y̶s̶a̶ ̶ «̶f̶r̶a̶g̶m̶e̶n̶t̶M̶a̶i̶l̶» ̶, ̶ nö delat v soll meine nichego nE budem, ̶ Poetomu ̶o̶s̶t̶a̶v̶i̶m̶ EGO Telo ̶p̶u̶s̶t̶y̶m̶.
[Gelöscht, siehe „Anmerkung 1 vom 20.04.2019“]Wir benötigen einen Link zu einer Instanz von Aktivität. Wir werden es bekommen, wenn ein Fragment an eine Aktivität wie diese angehängt ist:

Bei der Methode „onClick“ (dieselbe, die aufgerufen wird, wenn auf die Schaltfläche unseres Fragments geklickt wird) fügen wir der Schnittstelle einen Aufruf von einer Aktivitätsinstanz hinzu.

Der endgültige Code des Fragments nach dem Löschen von Kommentaren (aus Gründen der Kompaktheit) sieht folgendermaßen aus:

Jetzt zählt unser
Fragment die Anzahl der Schaltflächenklicks , zeigt sie in einer Popup-Nachricht an und
überträgt dann über die Postman-Schnittstelle
den Wert der Zählervariablen an die Variable numberOfClicks , die als Umschlagcontainer zum Senden von Nachrichten vom Fragment an die Aktivität dient. Aktivität, die eine neue Nachricht empfängt, zeigt sie sofort in ihrem Widget-Textfeld mit der Kennung "textReport" an. Das Ziel ist erreicht!

PS: Durch Ändern der Programmiersprache von Java auf Kotlin kann das Codefragment erheblich reduziert werden:

PPS: Laden Sie hier Projektdateien herunter:
Java ,
Kotlin .
Anmerkung 1 vom 20.04.2019:
Die Implementierung der Postman-Schnittstelle wurde aus dem Fragmentcode entfernt.
Ein Fragment arbeitet mit einer Schnittstelle durch Aktivität, in der diese Schnittstelle bereits implementiert ist.
Vielen Dank an
Mikaakim für den
Kommentar .
Aktualisierte Dateien können von github unter den obigen Links heruntergeladen werden.