Wie kann ich meinen Cursor eine Orientierungsänderung überleben lassen?

8

Ich versuche, meine App-Rotation freundlich zu gestalten, aber ich habe einige Probleme beim Speichern des Cursors.

Der Cursor enthält ungefähr 13.000 + Datenzeilen, die in ListView angezeigt werden, und würde daher eine ganze Weile dauern, wenn ich bei jeder Änderung der Konfiguration eine erneute Abfrage ausführen würde. In meinem onRetainNonConfigurationInstance() gebe ich meinen Cursor zurück und lade ihn dann über getLastNonConfigurationInstance() herunter.

Mein abgerufener Cursor scheint jedoch bereits geschlossen zu sein, und daher kann mein Adapter die Liste nicht mehr rendern. Soweit ich weiß, wurde der Cursor geschlossen, da onDestroy() automatisch alle Cursor schließt.

Ich speichere den Cursor so:

%Vor%

Und rufen Sie es so auf:

%Vor%

Ich füge die Stack-Trace ein, wenn jemand es sehen möchte:

%Vor%

Ich bin durch den Code gegangen und habe herausgefunden, dass der Cursor bis onRetainNonConfigurationInstance() noch offen ist, aber nachdem er durch getLastNonConfigurationInstance() gelangt ist, ist er bereits geschlossen.

Wie kann ich meinen Cursor die Orientierungsänderung überleben lassen? Danke für die Hilfe!

BEARBEITEN: Basierend auf Romains Antwort habe ich alle meine startManagingCursor() s auskommentiert. Ich hätte die Punkte verbinden und darüber nachdenken sollen! Wie auch immer, meine App überlebt jetzt eine Umdrehung, aber wenn Sie sie wieder auf die ursprüngliche Ausrichtung zurücksetzen, stürzt sie immer noch ab. Fortsetzung meiner Fehlersuche und werde Sie wissen lassen, was ich herausgefunden habe.

EDIT2: Ich denke, ich habe herausgefunden, was die neuen Fehler verursacht. Ich habe ein FilterQueryProvider implementiert, das einen neuen Cursor zurückgibt. Ich habe die Ergebnisse dieses Filters meinem ursprünglichen Cursor zugewiesen. Scheint so weit zu arbeiten.

    
Zarah 25.01.2011, 09:23
quelle

2 Antworten

4

Sie verwenden wahrscheinlich einen verwalteten Cursor. Verwaltete Cursor werden automatisch geschlossen, wenn die Aktivität zerstört wird. Sie sollten zu einem nicht verwalteten Cursor wechseln.

    
Romain Guy 25.01.2011, 09:29
quelle
0

Fügen Sie dieses Attribut einfach in Ihrem Aktivitäts-Tag in der Menifest-Datei hinzu

android: configChanges="orientation | keyboardHidden"

es wird dies lösen

keine Notwendigkeit, etwas anderes zu implementieren

:) Es hat mir aber geholfen.

    
Javanator 25.01.2011 09:33
quelle