2013-03-06 4 views
6

Ich habe eine FragmentActivity mit Container, wo ich Fragment mit ViewPager setzen. In ViewPager habe ich 3 Fragment s:Fragmente in ViewPager werden neu erstellt

[MainActivity] 
    [ViewPagerFragment] 
     [Fragment1][Fragment2][Fragment3] 

Wenn der Benutzer auf Fragment1/Fragment2/Fragment3 auf eine Schaltfläche klickt, ersetze ich die ViewPagerFragment mit OtherFragment, so die Hierarchie sieht wie folgt aus:

[MainActivity] 
    [OtherFragment] 

Wenn Ich schlug Zurück Knopf, ViewPagerFragment wird neu erstellt, sowie seine verschachtelte Fragment s (Fragment1/Fragment2/Fragment3).

Gibt es eine Möglichkeit, den Zustand ViewPagerFragment und seine verschachtelten Fragmente zu speichern? Damit die Fragmente ihren Zustand behalten und nicht neu erstellt werden?

Ich habe setRetainInstance(true) für ViewPagerFragment gesetzt, aber scheint, dass es nicht wirksam wird.

Antwort

16

einfach eingestellt dies: - wenn das Argument ist die Anzahl der Fragmente in dem ViewPager

mViewPager.setOffscreenPageLimit (3);

ViewPager ist sehr eifrig beim Herunterfahren von Dingen, die es gerade nicht benutzt, und genau das passiert hier. Das Standardverhalten besteht darin, dass ViewPager eine Seite auf jeder Seite der angezeigten Seite "behält" und den Rest zerstört. Daher wird Seite 3 in Ihrer 3-seitigen Ansicht zerstört, wenn Seite 1 ausgewählt wird, und wenn Seite 2 erneut ausgewählt wird, wird Seite 3 neu erstellt. Wie Sie bemerkt haben, wird auf Seite 2 onCreate (..) nur einmal aufgerufen, da es immer neben der aktuell ausgewählten Seite liegt.

Um dies zu lösen, setzen Sie einfach ViewPager.setOffscopePageLimit (2). Dann behält der ViewPager alle Ihre Fragmente. Das ist offensichtlich keine gute Idee für eine große Anzahl von Fragmenten, aber für Ihren Fall sollte es in Ordnung sein.

+0

Es können Probleme auftreten, wenn die Systemressourcen knapp werden. Einige Ansichten in Ihrem Fragment oder das Fragment selbst werden abgerissen, um diese Ressourcen woanders zu verwenden. – sudocoder