Ich habe ein Fragment ein onCreateView
Ich mache einen Hintergrund asyn-Aufruf, um einige Daten zur Anzeige zu holen.
Ich speichere das Objekt, das das Ergebnis des Hintergrundaufrufs ist, als eine Membervariable des Fragments.
Wenn ich die Benutzeroberfläche und die Daten sehe, ist alles in Ordnung und wenn ich die Home-Taste drücke, geht die App zum Hintergrund. Wenn ich die App erneut öffne, sind die Daten in der Benutzeroberfläche von meinem Fragment aufgebläht.
So jetzt bin ich mir nicht sicher über die folgenden:
1) Sollte ich mein Objekt in der onSaveInstanceState
speichern?
2) Wo soll ich es wiederherstellen? In dem Bündel in der onCreateView
übergeben?
3) Wann werden die Daten in meinem Bundle gespeichert? Ich meine, wie kann ich das sehen, ohne es jetzt zu speichern, würde ich die Daten von meinem UI verlieren?Korrekte Verwendung des Instanzstatus von Fragmenten speichern
Antwort
In Ihrem Fragment Konstruktor, fügen Sie die folgende Zeile:
setRetainInstance(true);
Kontrolle, ob ein Fragment Instanz über Aktivität beibehalten wird Neuschöpfung (wie aus einer Konfigurationsänderung).
Es hängt von Ihren Daten (Größe) ab.
Möchten Sie ein Fragment auf dem Backstack haben (mit beibehaltenem Fragment können Sie nicht)?
Für "Home-Button-Aktion" und nicht beibehalten Fragment implementieren Parcelable-Schnittstelle und verwenden Sie onSaveInstanceState() zu speichern und onCreateView()/onCreate(), um Daten aus einem Bundle wiederherzustellen.
Achten Sie auf die Schaltfläche "Zurück", um Ihre Daten zu verlieren.
Wenn ich die Home-Taste drücke und die App öffne, wird die 'onCreateView' nicht aufgerufen – Jim
Das funktioniert so mit setRetainInstance (true), onCreate() wird noch aufgerufen. Und wenn Sie beibehaltenes Fragment verwenden, warum möchten Sie überhaupt Daten speichern? –
auch wie eine Aktivität können Sie den Zustand eines Fragments behalten eine Bundle verwenden, falls der Prozess Aktivität getötet wird, und Sie müssen das Fragment Zustand wiederherzustellen, wenn die Aktivität neu erstellt wird. Sie können den Zustand während des onSaveInstanceState() - Callbacks des Fragments speichern und es entweder onCreate(), onCreateView() oder onActivityCreated() wiederherstellen. Weitere Informationen zum Speichern des Status finden Sie im Dokument Aktivitäten .
Es scheint, dass Ihr Fragment in Ordnung ist, indem es die Daten jedes Mal abruft, wenn es angezeigt wird.
Wenn Sie die Daten speichern möchten, um das asynchrone Abrufen zu vermeiden, können Sie onSaveInstanceState
verwenden. Dazu müssen Sie Ihre Daten unter Verwendung einer Bundle
speichern.
dann in onCreateView
überprüfen, ob savedInstanceState
ist null
und wenn es nicht von der Asynchron holen, sonst erstellen Sie Daten aus dem savedInstanceState
Bundle
.
- 1. Ist dies eine korrekte Verwendung von Android Fragmenten und NavigationDrawer?
- 2. Korrekte Verwendung des Fortschrittsbalkens
- 3. Korrekte Verwendung von Objekten in Karten speichern
- 4. Instanzstatus einer Aktivität manuell speichern und wiederherstellen
- 5. Speichern Sie einen benutzerdefinierten ListView-Instanzstatus?
- 6. Korrekte Verwendung von PreparedStatement
- 7. Korrekte Verwendung von Objekten
- 8. Korrekte Verwendung von CancellationToken
- 9. korrekte Verwendung von Zend_Db
- 10. Korrekte Verwendung von ArgumentException?
- 11. korrekte Verwendung von scipy.optimize.fmin_bfgs
- 12. Korrekte Verwendung von Unterfragmenten mit (Child) FragmentManager
- 13. Korrekte Verwendung des lokalen Chrome-Speichers Get
- 14. Korrekte Verwendung des JDBC-Verbindungspools (Glassfish)
- 15. NSTextTab - Korrekte Verwendung von „Optionen“
- 16. Verwendung von BackButton in Fragmenten Android
- 17. Aktionsleiste Tabs ohne Verwendung von Fragmenten?
- 18. Android - Korrekte Verwendung von invalidateOptionsMenu()
- 19. Korrekte Verwendung von const Konstanten
- 20. die korrekte Verwendung von Zeigern
- 21. Korrekte Verwendung von MySQL LOAD_FILE()
- 22. C: Korrekte Verwendung von strtok_r
- 23. Korrekte Verwendung von twoLineListItem Android
- 24. Korrekte Verwendung von Boost Lambda
- 25. Korrekte Verwendung von Observable (RxJava)
- 26. Korrekte Verwendung von veränderbaren/unveränderlichen Listen
- 27. Korrekte Verwendung von Signalen in einem Aktivitätsdiagramm
- 28. Node.js ausdrückliche korrekte Verwendung von bodyParser Middleware
- 29. Korrekte Verwendung einer Klasseninstanz
- 30. Korrekte Verwendung von flush() in JPA/Hibernate
So kann ich im Paket für den onSaveInstanceState speichern, aber ich kann das nicht verwenden? – Jim