Mein Problem ist im Grunde das gleiche wie dieses: Manchmal nicht ' t getCreateLoader Callback nach dem Aufruf von initLoader
Ich habe 2 ListFragments
, die in einem ViewPager
enthalten sind. Sie werden zuerst korrekt geladen, aber wenn ich die Ausrichtung ändere, ruft die Methode initLoader
nicht onCreateLoader
auf.
Wenn ich jedoch zur ursprünglichen Ausrichtung zurückkehre, ist alles wieder in Ordnung.
Hier ist mein Code für die FragmentActivity
:
und hier ist der Code eines der ListFragments
:
Ich habe verschiedene Kombinationen dieser Methoden probiert destroyLoader
, restartLoader
, aber ohne Erfolg ... Weiß jemand, was vor sich geht?
Bearbeiten
Mit LoaderManager.enableDebugLogging(true)
bekomme ich folgende Logs:
Die erste Ladung gibt dies
Wenn ich dann die Ausrichtung ändere, gibt es das
%Vor%Wenn ich dann zur ursprünglichen Orientierung zurückkomme, erhalte ich einen Fehler, aber dann wird alles wieder geladen:
%Vor% Die Protokolle wiederholen sich dann für weitere Orientierungsänderungen. Warum wird die CursorLoaders
gestoppt und nicht neu gestartet? Wie kann ich sie neu starten?
BEARBEITEN 2
Ich habe mein Problem dank Nikis behoben, aber er hat eine interessante Frage aufgeworfen:
Warum funktionierte das android.app.LoaderManager
nicht?
Hier sind die Protokolle nach der Verwendung der Support-Version. Die erste Ladung gibt das gleiche wie oben, aber nach der Änderung der Orientierung stoppt die erneute Verwendung der Cursor sie nicht.
%Vor%Und wenn ich zur ursprünglichen Orientierung zurückkomme, ist das das Ergebnis:
%Vor%Dieses Problem tritt auf, wenn Sie einige der Aktivitäten von Support-Bibliotheken mit android.app.LoaderManager kombinieren.
Ich hatte genau das gleiche Problem mit android.support.v7.app.ActionBarActivity und android.app.LoaderManager:
Durch die Verwendung von android.support.v4.app.LoaderManager hat alles wieder perfekt funktioniert!
Ich hatte das gleiche Problem wie das OP, dass onCreateLoader
nach einer Konfigurationsänderung nicht aufgerufen wurde. Das war jedoch nicht wirklich das Problem (da die Verwendung von getSupportLoaderManager().enableDebugLogging(true);
gezeigt hat, dass meine Loader erfolgreich wiederverwendet wurden, mussten keine neuen erstellt werden).
Also habe ich mir meine onLoadFinished(Loader<Cursor> loader, Cursor cursor)
-Methode angesehen und festgestellt, dass sie im Gegensatz zu onCreateLoader
immer nach einer Konfigurationsänderung aufgerufen wurde. Und das cursor
wurde jedes Mal neu gefüllt. : -)
Das Problem war, dass die Position des Cursors am Ende des Resultsets lag. Daher führten meine Versuche, es zu durchlaufen, zu keiner Aktion (und folglich wurde meine Benutzeroberfläche nicht ausgefüllt).
Die Lösung, die funktioniert hat, war, die Cursor-Position vor dem ersten zurück zu bewegen:
%Vor% Ich habe das am Anfang meiner onLoadFinished
-Methode angegeben.
In der Frage, auf die Sie verwiesen haben, wurde eine Arbeit dokumentiert. Rufen Sie restartLoader in onResume auf, anstatt Loader an anderer Stelle zu erstellen. restartLoader erstellt bei Bedarf.
Tags und Links android