2012-04-08 9 views
0

Meine Apps verwenden Fragmente, um eine ListView im Hochformat oder die ListView- und "Details" -Ansicht nebeneinander im Querformat anzuzeigen. Ich habe auch einen Menüpunkt in der ActionBar, der eine AsyncTask startet. Das Problem besteht darin, dass die AsyncTask beendet wird, wenn der Benutzer seine Anzeige von Hochformat zu Querformat (oder umgekehrt) dreht, während die AsyncTask ausgeführt wird. Um die AsyncTask zu beheben vom Stoppen, fügte ich die configChanges zum AndroidManifest Attribute:Fragmentwechsel mit AsyncTask

<activity android:name="ListingFragment" android:configChanges="keyboardHidden|orientation" /> 

jedoch hinzu, dass dann das Attribut-Fragment verhindert automatisch in der Landschaft/Hochformat umgeschaltet wird. Gibt es eine Möglichkeit, die Fragmente automatisch wechseln zu lassen, ohne die AsyncTask zu löschen?

Antwort

1

Sie müssen die Instanz Ihrer asynctask speichern, bevor die Aktivität beendet wird. Sie können onRetainCustomNonConfigurationInstance() verwenden, um es zu speichern. In Ihrem oncreate können Sie es dann unter Verwendung getLastCustomNonConfigurationInstance() abrufen. Dann können Sie in Ihrem onCreate Ihre Aktivität erneut an die asynctask anhängen.

+0

Ich denke onRetainCustomNonConfigurationInstance() ist veraltet und die Dokumentation sagt setRetainInstance() –

+0

Das ist für einen anderen Zweck. Wenn Sie 'setRetainInstance (true) 'aufrufen, bedeutet dies, dass die Fragment-Instanz nicht mit der Aktivität zerstört wird. Sie wird beibehalten (weitergegeben) und die neue Aktivität erhält dieses Fragment, anstatt ein neues zu erstellen. Obwohl "OnRetain ..." ist veraltet, ich weiß nicht, dass sie eine andere Möglichkeit zur Verfügung gestellt, eine Instanz eines Objekts durch Aktivität zerstören-erstellen-Zyklen. – dmon

+0

gut zu wissen. Ich werde dann onRetainCustomNonConfigurationInstance() verwenden. Danke für die Antwort. –