onCreateLoader wird nicht aufgerufen, wenn sich die Ausrichtung ändert

7

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 :

%Vor%

und hier ist der Code eines der ListFragments :

%Vor%

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

%Vor%

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%     
Dude 11.02.2014, 17:56
quelle

4 Antworten

13

Sie können LoaderManager.enableDebugLogging(true) verwenden, um das Ladeprogramm zu debuggen, oder Sie können getSupportLoadermanager() anstelle von getLoaderManager()

verwenden     
nikis 11.02.2014, 18:00
quelle
4

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:

  • Erstes Laden funktioniert
  • dann, wenn sich die Ausrichtung ändert, wird der loader neuere beendet
  • und dann, wenn es wieder in die ursprüngliche Richtung geht, funktioniert es wieder.

Durch die Verwendung von android.support.v4.app.LoaderManager hat alles wieder perfekt funktioniert!

    
dstefanox 06.02.2015 07:30
quelle
2

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.

    
ban-geoengineering 26.01.2016 12:16
quelle
1

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.

    
Eric Woodruff 11.02.2014 18:02
quelle

Tags und Links