Ich habe derzeit ein Fragment in einer Überlagerung. Dies dient zur Anmeldung beim Dienst. In der Telefon-App sind alle Schritte, die ich im Overlay anzeigen möchte, eigene Bildschirme und Aktivitäten. Es gibt 3 Teile des Anmeldevorgangs und jeder hatte seine eigene Aktivität, die mit startActivityForResult () aufgerufen wurde.
Jetzt möchte ich dasselbe mit Fragmenten und einer Überlagerung tun. Die Überlagerung zeigt ein Fragment, das jeder Aktivität entspricht. Das Problem ist, dass diese Fragmente in einer Aktivität in der Honeycomb-API gehostet werden. Ich kann das erste Fragment zum Laufen bringen, aber dann muss ich ActivityForResult () starten, was nicht möglich ist. Gibt es etwas in der Art von startFragmentForResult (), bei dem ich ein neues Fragment starten kann und wenn es fertig ist, ein Ergebnis zum vorherigen Fragment zurückgibt?
quelle
onActivityResult
Wunsch die Methode des übergeordneten Fragments aufrufen .Wenn Sie möchten, gibt es einige Methoden für die Kommunikation zwischen Fragmenten.
Mit diesen können Sie zurückrufen.
quelle
setTargetFragment()
.Wir können einfach dasselbe ViewModel zwischen Fragmenten teilen
SharedViewModel
FirstFragment
SecondFragment
quelle
Meine 2 Cent.
Ich wechsle zwischen Fragmenten, indem ich ein altes Fragment mit einem neuen austausche, indem ich es ausblende und zeige / hinzufüge (vorhanden / neu). Diese Antwort ist also für Entwickler, die Fragmente wie ich verwenden.
Dann benutze ich die
onHiddenChanged
Methode, um zu wissen, dass das alte Fragment vom neuen zurückgeschaltet wurde. Siehe Code unten.Bevor ich das neue Fragment verlasse, habe ich ein Ergebnis in einem globalen Parameter festgelegt, der vom alten Fragment abgefragt werden soll. Dies ist eine sehr naive Lösung.
quelle
getAndReset()
Methode?onResume()
das erste Fragment aufgerufen, wenn das zweite entlassen wird?Vor kurzem hat Google gerade eine neue Funktion hinzugefügt, die
FragmentManager
das gemacht hatFragmentManager
, als zentraler Speicher für Fragmentergebnisse zu fungieren. Wir können die Daten leicht zwischen Fragmenten hin und her übertragen.Startfragment.
Ein Fragment, das wir zurückhaben wollen.
Das Snippet stammt aus den offiziellen Dokumenten von Google. https://developer.android.com/training/basics/fragments/pass-data-between#kotlin
Bei den Daten dieser Antwort befindet sich diese Funktion noch im
alpha
Status. Sie können es mit dieser Abhängigkeit ausprobieren.quelle
In Ihrem Fragment können Sie getActivity () aufrufen. Dadurch erhalten Sie Zugriff auf die Aktivität, mit der das Fragment erstellt wurde. Von dort aus können Sie Ihre Anpassungsmethode aufrufen, um die Werte festzulegen oder die Werte zu übergeben.
quelle
Es gibt eine Android-Bibliothek - FlowR , mit der Sie Fragmente für Ergebnisse starten können.
Ein Fragment für das Ergebnis starten.
Die Behandlung führt zum aufrufenden Fragment.
Festlegen des Ergebnisses im Fragment.
quelle
Eine Lösung mit Schnittstellen (und Kotlin). Die Kernidee besteht darin, eine Rückrufschnittstelle zu definieren, sie in Ihre Aktivität zu implementieren und sie dann von Ihrem Fragment aus aufzurufen.
Erstellen Sie zunächst eine Schnittstelle
ActionHandler
:Rufen Sie dies als Nächstes von Ihrem Kind (in diesem Fall Ihrem Fragment) auf:
Implementieren Sie dies schließlich in Ihrem übergeordneten Element, um den Rückruf zu erhalten (in diesem Fall Ihre Aktivität):
quelle
Der einfachste Weg, Daten zurückzugeben, ist setArgument (). Zum Beispiel haben Sie fragment1, das fragment2 aufruft, das fragment3 aufruft, fragment1 -> framgnet2 -> fargement3
In Fragment1
In Fragment2 nennen wir Fragment3 wie gewohnt
Als wir unsere Aufgabe in Fragment3 beendet haben, rufen wir jetzt so auf:
Jetzt können wir in fragment2 leicht Argumente aufrufen
quelle
Abhängig von Ihrer Architektur können Sie auch ein gemeinsames ViewModel zwischen den Fragmenten verwenden. In meinem Fall ist FragmentA ein Formular, und FragmentB ist eine Elementauswahlansicht, in der der Benutzer ein Element suchen und auswählen und im ViewModel speichern kann. Wenn ich dann zu FragmentA zurückkomme, sind die Informationen bereits gespeichert!
quelle