Android: Übergeben von Objekten zwischen Fragmenten

8

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

aus

Bearbeiten 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.

    
Jeremy 15.11.2013, 09:56
quelle

4 Antworten

3

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.

    
sturrockad 15.11.2013, 10:08
quelle
8

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%     
shihab_returns 29.06.2014 08:52
quelle
1

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%     
Jeremy 15.11.2013 11:37
quelle
0

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.

Android DataCache

  1. Setzen Sie Ihr Datenobjekt auf die KimchiDataCache-Instanz in Ihrer Aktivität oder Ihrem Fragment.

    %Vor%
  2. Erhalten Sie Ihr Datenobjekt in Ihrer Aktivität des Fragments, das Sie hinzugefügt haben.

    %Vor%
kimkevin 04.10.2015 11:49
quelle

Tags und Links