Ich habe einen ViewPager an einen FragmentPagerAdapter angeschlossen, der drei Fragmente anzeigt. Der ViewPager scheint die Ansicht eines gehosteten Fragments zu zerstören, wenn es mehr als einen Wisch von der aktuellen Position entfernt ist.
Diese Ansichten sind alles einfache Listen und diese Optimierung ist völlig unnötig, daher möchte ich sie deaktivieren. Es verursacht einige visuelle Probleme, da auf die Listen Layoutanimationen angewendet werden und diese Animationen wiedergegeben werden, nachdem sie zerstört und neu erstellt wurden. Außerdem wird jedes Mal die Intro-Animation der Bildlaufleiste angezeigt (wobei die Bildlaufleiste kurz sichtbar ist, um anzuzeigen, dass ein Bildlauf möglich ist), die ablenken kann, und die aktuelle Bildlaufposition des Benutzers geht dabei verloren.
Das dritte Fragment wird auch erst geladen, wenn der erste Wisch ausgeführt wird. Dies ist problematisch, da jedes Fragment seine eigenen Serviceaufrufe verarbeitet und ich es vorziehen würde, alle drei Fragmente gleichzeitig auszulösen, wenn die Aktivität geladen wird. Eine Verzögerung des dritten Serviceabrufs ist nicht ideal.
Gibt es eine Möglichkeit, ViewPager davon zu überzeugen, dieses Verhalten zu beenden und nur alle meine Fragmente im Speicher zu behalten?
Standardmäßig erstellt ViewPager die Fragmente neu, wenn Sie über die Seite wischen. Um dies zu verhindern, können Sie eines von zwei Dingen ausprobieren:
1. Rufen Sie in onCreate () Ihrer Fragmente setRetainInstance (true) auf.
2. Wenn die Anzahl der Fragmente fest und relativ gering ist, fügen Sie in onCreate () den folgenden Code hinzu:
Wenn ich mich richtig erinnere, ist die zweite Option vielversprechender. Aber ich fordere Sie auf, beide auszuprobieren und zu sehen, welche davon funktionieren.
quelle
"Legen Sie die Anzahl der Seiten fest, die im Leerlauf auf beiden Seiten der aktuellen Seite in der Ansichtshierarchie beibehalten werden sollen. Seiten, die diese Grenze überschreiten, werden bei Bedarf vom Adapter neu erstellt."
http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)
quelle