Bevor ich anfange, habe ich die Frage wie folgt durchgesehen:
Daten zwischen Fragmenten übergeben: Bildschirmüberlappung Wie Werte zwischen Fragmenten übergeben werden
sowie Android-Dokumente:
sowie dieser Artikel:
Obwohl alle oben erwähnten Fälle denen ähnlich sind, die ich habe, ist es nicht völlig identisch. Ich habe hier ein gutes Tutorial verfolgt (ein Teil meines Codes basiert auf diesem Artikel):
Ich habe folgende Dateien:
RegisterActivity.java
NonSwipeableViewPager.java
ScreenSliderAdapter.java
RegisterOneFragment.java
RegisterTwoFragment.java
Und die folgenden Layouts:
activity_register.xml
fragment_register_one.xml
fragment_register_two.xml
Was ich versuche zu erreichen, ist die Übergabe eines serialisierbaren Objekts von RegisterFragmentOne an RegisterFragmentTwo.
Bisher habe ich das getan (einige Codes wurden weggelassen):
RegisterActivity.java
%Vor%ScreenSliderAdapter.java
%Vor%NonSwipeableViewPager.java (erweitert die ViewPager-Klasse und überschreibt Folgendes)
%Vor%RegisterOneFragment.java
%Vor%Was ich versuche zu erreichen ist, dass, wenn ein Benutzer eine Schaltfläche auf RegisterOneFragment drückt, Daten an einen Server gesendet werden (und eine Überprüfung über JSON zurückgegeben werden). Wenn die zurückgegebenen Daten gültig sind, sollte die Anwendung zum nächsten Fragment wechseln, das RegistrationTwoFragment ist.
Ich habe etwas Verwirrung darüber, wie Objekte zwischen Fragmenten übergeben werden, da meine Fragmente mit einem Adapter erstellt werden. Und dieser Adapter wird dann an meine Aktivität angehängt.
Kann mir jemand dabei helfen? Thx
Bearbeiten 1:
Ich habe versucht, eine Verknüpfung zu erstellen (funktioniert leider nicht):
In RegisterActivity habe ich erstellt:
%Vor%und in RegisterOneFragment:
%Vor%Schließlich heißt es in RegisterTwoFragment
%Vor%Es löst eine nullPointerExceptions
ausBearbeiten 2
Nur um klar zu sein, RegisterActivty enthält mehrere Fragmente. Und der Benutzer kann nur zwischen den Fragmenten navigieren, indem er auf eine Schaltfläche klickt. Die Aktivität hat keine Tab-Leiste.
Ich hätte normalerweise in der enthaltenden Aktivität ähnliche Setter oder Methoden.
Wenn Sie also richtig verstanden haben, möchten Sie, dass der Benutzer auf RegistrationOneFragment
zugreift. Wenn Sie fertig sind, verwenden Sie diese Daten, validieren Sie sie und übergeben Sie sie, falls gültig, an RegistrationTwoFragment
und verschieben Sie den Benutzer zu diesem Fragment
.
Sie könnten einfach validateJson(regData)
in Ihrer onEmailRegistered
-Methode aufrufen, um die Validierung in Ihrer Aktivität zu verarbeiten, wenn dies erfolgreich ist, eine Transaktion an RegistrationTwoFragment
festschreiben.
Dann brauchst du nur Getter und Setter in deiner Aktivität oder deinem Fragment, um getRegistrationOneData()
in der Aktivität oder setData(Registration args)
im Fragment zu sagen, wie deine Beispiele oben zeigen.
Ich kenne keine Möglichkeit, die Argumente direkt in das Fragment zu geben.
Es ist einfach, Objekte zu teilen, indem Sie Serializable zu Ihrem benutzerdefinierten Objekt implementieren. Ich habe ein Tutorial über dieses hier geschrieben.
Aus Fragment Eins:
%Vor%In Fragment zwei:
%Vor%Ich habe eine Lösung für meine Frage gefunden, und ich bin mir sicher, dass das nicht der richtige Weg ist ...
Also in RegisterActivity.java füge ich + die folgenden Zeilen hinzu (thx to @sturrockad):
%Vor%Dann in RegisterTwoFragments.java (oder in dem Fragment, zu dem ich das Objekt erhalten möchte):
%Vor%Ich habe das Objekt mit Pacelable oder Serializable zur Übertragung festgelegt, aber jedes Mal, wenn ich dem Objekt (Modell) andere Variablen hinzufüge, muss ich alles registrieren. Es ist so unbequem.
Es ist sehr einfach Objekte zwischen Aktivitäten oder Fragmenten zu übertragen.
Setzen Sie Ihr Datenobjekt auf die KimchiDataCache-Instanz in Ihrer Aktivität oder Ihrem Fragment.
%Vor%Erhalten Sie Ihr Datenobjekt in Ihrer Aktivität des Fragments, das Sie hinzugefügt haben.
%Vor%Tags und Links java android android-fragments